天天看點

為什麼兩個float類型的數值不能直接相等

在判斷兩個浮點數 a 和 b 是否相等時,不要用 a==b,應該判斷二者之差的絕對值fabs(a-b) 是否小于某個門檻值,例如 1e-9。

參考:    http://blog.csdn.net/turkeyzhou/article/details/2755970

概括:

原因在于計算機在記憶體表示float的時候都是有誤差的

最後,有一個往往高手也汗顔的地方,一定要記住,浮點數沒有無符号型的usinged float/double是錯誤的.

你查一下符點數存儲标準IEEE754就知道了!

符點數是采用二進制科學計數法來進行存儲的,是以,絕大多數的數在計算機中是不能 精确 表示的。

如果兩個數a b都是常數指派,這樣比較,應該不會有問題,如:double a=5.3,b=5.3;
if ( a == b )
{
printf("a=b\n");
}
這時會輸出a=b

如果a或b是經過運算後得到的值,這時就不一定是一個精确的你想要的值了,如:
double b=2.6+2.7,a=5.3;
if ( a == b )
{
printf("a=b\n");
}
這時就不一定能輸出a=b了!