2015-06-20 57 views
1
#include<stdio.h> 
int main() 
{ 
    float x = 0.6; 
    if (x == 0.6) 
     printf("IF"); 
    else if (x == 0.6f) 
     printf("ELSE IF"); 
    else 
     printf("ELSE"); 
} 

該代碼給出輸出ELSE IF浮動比較

#include<stdio.h> 
int main() 
{ 
    float x = 0.5; 
    if (x == 0.5) 
     printf("IF"); 
    else if (x == 0.5f) 
     printf("ELSE IF"); 
    else 
     printf("ELSE"); 
} 

該代碼給出輸出IF

即使兩個程序看起來相同的,但爲什麼會出現在差異輸出?爲什麼發生這種情況?

回答

6

因爲0.5在IEEE-754二進制格式(如binary32和binary64)中有確切的表示。 0.5是兩個負的冪。另一方面,0.6不是2的冪,它不能完全代表floatdouble

+0

你剛碰巧知道嗎? –

+0

@Noob我很害怕我不明白你的問題。 – ouah

+0

答案相當驚人。而已 !我想知道你是如何知道的。 –