关于if语句:C中的浮点数比较

Float comparison in C

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
#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

1
2
3
4
5
6
7
8
9
10
11
#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");
}

如果

尽管两个程序看起来都一样,但为什么输出不同呢?为什么会这样?


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