我制定了以下代码并得到了一个奇怪的输出。任何人都可以解释它是如何工作的吗?
main()
{
float a=0.8;
float b=0.25;
if(a==0.8)
printf("HELLO")
if(b==0.25)
printf("WORLD")
}
我得到的输出令人惊讶
WORLD
提前致谢
答案 0 :(得分:5)
这是因为0.25是2的幂(即2 ^ -2),而0.8不是。只能精确表示两个幂的精确和;所有其他数字(包括0.8)都表示为近似值,它在float
和double
之间具有不同的精度。 0.8
中的a==0.8
为double
,而a
为float
。他们的陈述是不同的,他们的价值也是如此。
答案 1 :(得分:3)
您绝不能像过去那样将float
- 值与绝对值进行比较。通常存在轻微的舍入误差,因为浮点数根据IEEE 754表示,并且机器无法提供精确的浮点值。
查看here以了解您的解释,尤其是舍入规则。
答案 2 :(得分:2)
你正在比较浮动与双重。尝试在数字后加上一个f
if(a==0.8f)
printf("HELLO")
if(b==0.25f)
printf("WORLD")
答案 3 :(得分:0)
给出的答案是正确的......在Dobb博士的Andrew Koenig正在写关于与浮动的订单关系,有一个观点:
答案 4 :(得分:0)
所有东西最终都以比特存储....所以浮点数会被圆整,以防它们的二进制等值重现......