http://www.cprogramming.com/tips/tip/difference-between-float-and-double來自:浮點和雙精度恆定比較
在C++等任何4.12值被視爲雙默認情況下。 比較花車和雙打可能是一個棘手的業務,因爲精度差異導致微小的錯誤。例如:
float a = 4.12;
if(a == 4.12)
{
cout << "hello";
}
else
{
cout << "bye";
}
這將顯示您的輸出爲 「再見4.12」
爲什麼?
因爲默認情況下4.12是雙精度(例如在if語句中,或者在賦值給我們的變量時是 ),但是將其存儲在浮點中會損失一些精度,因此比較double和float 導致數字精確度的微觀變化 - 記住 漂浮和雙打不準確。
這裏有兩個教訓:一個是大部分時間不應該直接比較浮點數,另一個是硬編碼浮點數的默認大小和類型是雙精度浮點數的兩倍。
事情是'你不應該做比較浮點變量和雙常數'。
所以我的問題是,比較浮動變量和浮動常量,然後'f'是好的?
就是這樣。
if(a == 4.12f)
呃你的問題是什麼? – Turtle
你問是否將一個浮點型常量與一個用雙常量初始化的浮點型變量(除了f之外的浮點型常量相同)總是計算爲相等?如果是這樣,我認爲這是一個合理的問題。 – samgak
@samgak是的,確切地說。對不起,我英文很差。 –