【发布时间】:2014-12-05 04:33:38
【问题描述】:
我有以下代码
案例1
float a=1.7;
if(a==1.7)
{
printf("Equal\n");
}
else if(a<1.7)
{
printf("less\n");
}
else{
printf("Greater\n");
}
输出
Greater
案例 2
float a=1.3;
if(a==1.3)
{
printf("Equal\n");
}
else if(a<1.3)
{
printf("less\n");
}
else{
printf("Greater\n");
}
输出
Less
为什么输出不符合预期?
为什么两种情况下的输出不同?
谁能在这里解释这些值是如何存储和比较的
提前致谢
【问题讨论】:
-
a是float,1.7 是double。由于分配到最接近的 FP 值,1.7 到float和 1.7 到double,它们不同。 -
当您编写 a=1.3 时,它并不完全存储 1.3。可以是 1.3000000001 也可以是 1.29999999。这取决于编译器。因此,要检查两个浮点数是否相等,您必须使用 fabs()。你可以这样写 if(fabs(a-1.3)
-
阅读floating-point-gui.de 很好地解释了这一切。
标签: c