int main()
{
float a = 0.7;
float b = 0.5;
if (a < 0.7)
{
if (b < 0.5) printf("2 are right");
else printf("1 is right");
}
else printf("0 are right");
}
我预计这段代码的输出是0 are right
。
但令我沮丧的是输出是1 is right
why?
int main()
{
float a = 0.7, b = 0.5; // These are FLOATS
if(a < .7) // This is a DOUBLE
{
if(b < .5) // This is a DOUBLE
printf("2 are right");
else
printf("1 is right");
}
else
printf("0 are right");
}
在比较过程中,浮点型被提升为双精度型,并且由于浮点数不如双精度型精确,因此 0.7 作为浮点型not与双倍的 0.7 相同。在这种情况下,当浮点型 0.7 提升时,其性能会低于双精度型 0.7。正如 Christian 所说,0.5 是 2 的幂总是能够准确表示,因此测试按预期进行:0.5 < 0.5
是假的。
所以要么:
- Change
float
to double
, or:
- Change
.7
and .5
to .7f
and .5f
,
你会得到预期的行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)