比較浮動的時候,我被這種奇怪的行爲來襲:奇怪的行爲具有恆定
float pi = 3.14;
if(pi == 3.14)
cout << "OK";
else
cout << "How is it possible?";
誰能解釋一下嗎?
比較浮動的時候,我被這種奇怪的行爲來襲:奇怪的行爲具有恆定
float pi = 3.14;
if(pi == 3.14)
cout << "OK";
else
cout << "How is it possible?";
誰能解釋一下嗎?
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.14
到float
得到一個OK
:
float pi = 3.14;
if(pi == (float)3.14)
cout << "OK";
else
cout << "How is it possible?";
因爲默認值像3.14
作爲雙重治療,但存儲在浮點型變量此值之一引起的損失精度;所以存在與不同精度有關的微觀差異。 這就是爲什麼浮點數不能直接在大部分時間進行比較的原因。
你忘了描述行爲,以及它的奇怪之處。 –
您的'pi'是'3.1400001049041748046875'(13170115 * 2^-22),並且您將它與'3.140000000000000124344978758017532527446746826171875'(7070651414971679 * 2^-51)進行比較。當然他們並不平等。 – Cubbi
[浮點數比較給出不同的結果]的可能重複(http://stackoverflow.com/questions/7580352/float-comparison-gives-different-results) –