我制定了以下代码并得到了一个奇怪的输出。谁能解释它是如何工作的?
main()
{
float a=0.8;
float b=0.25;
if(a==0.8)
printf("HELLO")
if(b==0.25)
printf("WORLD")
}
我得到的输出令人惊讶
WORLD
提前致谢
我制定了以下代码并得到了一个奇怪的输出。谁能解释它是如何工作的?
main()
{
float a=0.8;
float b=0.25;
if(a==0.8)
printf("HELLO")
if(b==0.25)
printf("WORLD")
}
我得到的输出令人惊讶
WORLD
提前致谢
这是因为 0.25 是 2 的幂(即 2^-2),而 0.8 不是。只有 2 的幂的精确和才能精确表示;float
所有其他数字,包括 0.8,都表示为近似值,在和之间具有不同的精度double
。0.8
ina==0.8
是一个,double
whilea
是一个float
。他们的表现不同,他们的价值观也不同。
您绝不能像以前那样将float
-values 与绝对值进行比较。通常会有轻微的舍入误差,因为浮点数是根据 IEEE 754 表示的,并且机器无法提供精确的浮点值。
在这里查看您的解释,尤其是舍入规则。
您正在将 float 与 double 进行比较。尝试在数字后加一个 f
if(a==0.8f)
printf("HELLO")
if(b==0.25f)
printf("WORLD")
一切最终都存储在位中......所以浮点数会被四舍五入,以防它们的二进制等价物重复出现......