C中的浮动比较

时间:2015-06-20 10:11:14

标签: c if-statement compiler-errors floating-point precision

#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

尽管两个程序看起来都相同,但为什么输出有差异?为什么会这样?

1 个答案:

答案 0 :(得分:6)

因为0.5具有IEEE-754二进制格式的精确表示(如binary32和binary64)。 0.5是2的负面力量。另一方面,0.6不是2的幂,并且无法在floatdouble中完全表示。