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 的幂,不能在 float
或 double
中准确表示。
#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 的幂,不能在 float
或 double
中准确表示。