是存在執行更有效的方式:有效的替代FMOD(X,2)
f = fmod(x+1, 2)
,以確定值是否爲偶數?
例如
f = 1
爲的x
所有奇數值的所有甚至x
f = 0
值我只需要這爲正整數的集合工作(我x
數據類型是int
)
是存在執行更有效的方式:有效的替代FMOD(X,2)
f = fmod(x+1, 2)
,以確定值是否爲偶數?
例如
f = 1
爲的x
所有奇數值的所有甚至x
f = 0
值我只需要這爲正整數的集合工作(我x
數據類型是int
)
爲什麼你是否使用fmod()
作爲整數?
標準測試將是:
const int f = (x + 1) % 2; /* Will be 1 if x is even, 0 if it's odd. */
的是它內置的整數模運算符%
做的測試。
加入1是(在我看來)有點混亂,我會做它:
const int f = (x % 2) == 0;
人誰「認爲,在位」經常寫測試爲:
const int f = (x & 1) == 0;
由於最低有效位必須清除整數爲偶數。雖然這可以被認爲不太清楚。
我不知道分析 - 我讀別人的代碼,並試圖改善它。你會發現兩個運營商之間的性能差異嗎? – bph 2013-04-08 15:08:19
整數的最低有效位不需要清零,以使整數爲偶數。通常,應該使用算術運算符(如'%')來操作數值和按位運算符(如'&')來操作位。這避免了這樣的錯誤(認爲所有整數的位表示都是二進制補碼)。與'(x + 1)%2'不同,'x%2 == 0'避免溢出。 – 2013-04-08 17:42:28
你可以只強制轉換爲int,我想...
f = (int)x % 2;
您可以使用正常的模運算與整數。我懷疑它在優化之後效率會更高,但'x&1'也可以。 – chris 2013-04-08 15:04:15
wierdly原FMOD似乎更快,則x%2上使用gprof – bph 2013-04-10 12:24:03