C 中的浮点数比较

Float comparison in C

#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

虽然两个程序看起来一样,但为什么输出结果不同?为什么会这样?

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