比較效率
回答
編譯器很可能會優化這類事情。不要擔心,只是在這種情況下代碼清晰。
彙編語言通常有>=
和<=
的操作步驟與<
和>
相同。例如,對於一個Motorola 68k,如果要比較的數據寄存器%d0
和%d1
和分支如果%d0
大於或等於%d1
,你會這樣說:
cmp %d0, %d1 // compare %d0 and %d1, storing the result
// in the condition code registers.
bge labelname // Branch to the given label name if the comparison
// yielded "greater than or equal to" (hence bge)
這是一個常見的錯誤認爲a >= b
表示計算機將執行兩個操作,而不是一個,因爲「或」在「大於或等於」。
如果優化器沒有優化它,請獲得更好的編譯器! – 2009-09-16 18:20:01
任何像樣的編譯器將這些兩個語句優化完全相同的底層代碼。事實上,它很可能會產生完全相同的同一代碼:
if (!(!(!(!(!(!(!(num < 10))))))))
只是因爲它的意圖似乎更清晰(輕度比你的第二個選擇更清楚我會選擇第一個你的,大規模更清晰的比我上面發佈的怪物)。我傾向於考慮如何閱讀它。想想這兩個句子:
- 如果number大於或等於十。
- 如果不是數字少於十的情況。
我相信第一個更清晰。
其實只是"gcc -s"
測試,以獲取彙編輸出,兩個語句生成如下代碼:
cmpl $9,-8(%ebp) ; compare value with 9
jle .L3 ; branch if 9 or less.
我相信你是在浪費時間看微的優化這樣的 - 你會在查看算法選擇等方面效率更高。那裏可能有更大的投資回報。
一般來說,任何速度差異都不會有太大影響,但它們並不一定意味着完全相同的東西。
在許多語言中,比較浮點值NaN會爲所有比較返回false,所以如果num = NaN,則第一個爲false,第二個爲true。
#include <iostream>
#include <limits>
int main () {
using namespace std;
double num = numeric_limits<double>::quiet_NaN();
cout << boolalpha;
cout << "(num >= 10) " << (num >= 10) << endl;
cout << "(! (num < 10)) " << (! (num < 10)) << endl;
cout << endl;
}
輸出
(num >= 10) false
(! (num < 10)) true
因此,編譯器可以使用單個指令來比較Num和在所述第一情況下,值10,但在第二個可能發出的第二指令以反轉的結果比較。(或者它可能只是使用一個分支,如果是零而不是分支,如果非零,一般不能說)
其他語言和編譯器會有所不同,對於類型他們真的具有相同語義的代碼可能完全相同。
- 1. NSString比較效率
- 2. C++ int比較效率
- 3. PHP回聲效率比較
- 4. 效率:Java中的UUID與int比較
- 5. 有效的比較
- 6. 循環效率對比
- 7. 不同的二項式係數算法的效率比較
- 8. 在內存分配方面的Java效率比較
- 9. List.Sort兩次的效率與List.Clone&Sort的比較
- 10. 如何比較不同佈局的效率?
- 11. 如何測量Python中的關係比較效率?
- 12. Ruby中的每個內存效率與reduce/inject的比較
- 13. 優化sql連接查詢,比較查詢效率
- 14. 陣列比較,雖然循環和效率
- 15. 用於比較集合的函數;有助於提高效率
- 16. 是(* I)。成員比異效率較低>構件
- 17. 在mysql中使用二進制文本比較 - 效率陷阱?
- 18. 如果在解釋語言/ ELSE和Switch效率比較
- 19. 比較在C++中的效率? (abs(X)> 1 vs abs(x)!= 0)
- 20. 迭代器和const_iterator之間的比較效率低下嗎?
- 21. SQL效率。重建表或比較每一行
- 22. С++:「無效比較」斷言
- 23. 字符串比較等效
- 24. C++無效比較器
- 25. 比較float比double更高效嗎?
- 26. 布爾比較與整數比較的處理成本比率是多少?
- 27. Python熊貓頻率字符串比較
- 28. 德爾福回報率比較結果
- 29. 爲什麼Document.querySelector比Element.querySelector更有效率
- 30. Java:ExecutorService比手動執行效率低?
num> = 10,如果僅用於可讀性... – 2009-09-16 02:57:30
用什麼語言? – 2009-09-16 03:07:22