2012-11-27 29 views
1

可能重複:
Floating point comparison上面的「float i = 0.7」初始化後,「i <0.7」是否爲真?

#include<stdio.h> 
#include<conio.h> 
int main() 
{ 
float i=0.7; 
clrscr(); 
if(i < 0.7) 
    printf("If Block"); 
else 
    printf("Else Block"); 
getch(); 
return 0; 
} 

我不明白whay輸出將是 「如果塊」 ......請大家幫忙,爲什麼在執行if部分?

+0

使用「double」或「0.7f」。 – ybungalobill

+3

花一個小時左右的時間閱讀[每位計算機科學家應瞭解的浮點算術知識](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。如果你對浮點近似很模糊,這將是一個真正讓人大開眼界的東西。 – WhozCraig

回答

13

其實i0.69999999998它是浮動表示。

當您在內存中分配i=0.7時,0.7不能像您想象的那樣在double precision中表示。

所以floatdouble之間的比較導致輸入推廣和在這種情況下i小於0.7這是雙。

+0

不應該總是舍入到相同的值,導致比較始終失敗? –

+3

@JanDvorak:不,比較是在'float'和'double'之間,所以'float'被提升並且比較爲'double'。 – ybungalobill

+0

0.7默認爲雙重 – Omkant

相關問題