浮點相等比較有時會有奇怪的邊緣情況,例如即使它們是相同的位模式,兩個NaN值也不相等。浮點相等和不等式
然而,可以假設不平等始終是平等的倒數嗎?也就是說,假設在主流架構(如x64)上實現的標準IEEE 64位浮點數字,無論存在哪種位模式,a == b
和a != b
中的一個總是正確的?
浮點相等比較有時會有奇怪的邊緣情況,例如即使它們是相同的位模式,兩個NaN值也不相等。浮點相等和不等式
然而,可以假設不平等始終是平等的倒數嗎?也就是說,假設在主流架構(如x64)上實現的標準IEEE 64位浮點數字,無論存在哪種位模式,a == b
和a != b
中的一個總是正確的?
是的,這將永遠是真實的,沒有數字解釋位模式的運算符==不會返回!=完全相反。
對於不同位模式(負零0x80 ...等於零0x00 ...)或相同的位模式比較爲不相等(NaN)的位模式,您可能已經有過例外的情況,但您已經提到過!=總是==的反轉。
一個人必須小心被測試的關係。 「x和y有不同的值?」和「x不等於y」有不同的測試
如果x或y是NaN或兩者,那麼它們是錯誤的,它們具有不同的值因爲他們中至少有一個根本沒有任何價值),但確實沒有平等。
C運營商!=
詢問「不等於」,因此它回答了後面的問題。而且因爲它詢問「不平等」,這是「平等」的邏輯否定。
有些語言提供了一種方法來提出前一個問題。
在C中,''中的'islessgreater(x,y)'宏提供了您描述的操作。 –
2013-04-06 13:05:41