浮點數只有在可以表達整數和二次冪的狀況下才能不損失。不然如何進行對比能夠採起c++
[c++]
fabs(a-b) < EPSION (目標精度)ui
符號位 階碼 尾數 0 10000110 01100000001000000..spa
等價於 1.01100000010000 * 2^(10000110^2 - 127)指針
浮點數的精度是由尾數決定的 ,浮點數的取值範圍是由階碼的尾數決定的code
inline static bool isdefined (double x) { return ((* (uint64 *) & x) & 0x7FF0'0000'0000'0000) != 0x7FF0'0000'0000'0000; }
//將浮點數轉爲整型64位指針,而後獲取值並與7ff的條件進行與運算,判斷是否觸發下面NaN判斷條件。
inline static bool isundef (double x) { return ((* (uint64 *) & x) & 0x7FF0'0000'0000'0000) == 0x7FF0'0000'0000'0000; }
複製代碼
這段代碼是在檢查浮點數前15位的階碼是否都爲1,爲何這麼檢查取決下面的這個條件。it
二進制的0x7ff0000000000001L ~ 0x7fffffffffffffffL 和 0xfff0000000000001L ~ 0xffffffffffffffffL 之間的數值被定義爲NAN類型,相似正無窮大和負無窮小。io