2012-05-31 44 views
1

比較浮動的時候,我被這種奇怪的行爲來襲:奇怪的行爲具有恆定

float pi = 3.14; 

if(pi == 3.14) 
    cout << "OK"; 
else 
    cout << "How is it possible?"; 

誰能解釋一下嗎?

+1

你忘了描述行爲,以及它的奇怪之處。 –

+2

您的'pi'是'3.1400001049041748046875'(13170115 * 2^-22),並且您將它與'3.140000000000000124344978758017532527446746826171875'(7070651414971679 * 2^-51)進行比較。當然他們並不平等。 – Cubbi

+0

[浮點數比較給出不同的結果]的可能重複(http://stackoverflow.com/questions/7580352/float-comparison-gives-different-results) –

回答

4

if聲明中的常量爲(double)3.14。它非常接近它的float版本,但不完全等於它,因爲3.14沒有完全表示。

嘗試與1.25或任何其他可完全表示的數字相同的技巧,您將獲得OK

float num = 1.25; 
if(num == 1.25) 
    cout << "OK"; 
else 
    cout << "How is it possible?"; 

你也可以投3.14float得到一個OK

float pi = 3.14; 

if(pi == (float)3.14) 
    cout << "OK"; 
else 
    cout << "How is it possible?"; 
+0

感謝您的回答 – Nick

+1

而不是'(float)3.14',你可以直接寫'3.14f'(「f」表示它是'float'而不是'double'。 – Matt

1

因爲默認值像3.14作爲雙重治療,但存儲在浮點型變量此值之一引起的損失精度;所以存在與不同精度有關的微觀差異。 這就是爲什麼浮點數不能直接在大部分時間進行比較的原因。