在判斷兩個浮點數 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了!