嗨,这肯定很简单,但我找不到为什么这不会在0.9之后退出循环的答案
#include <stdio.h>
int main()
{
float x;
for(x=.1;x!=1.0;x+=.1)
printf("%f\n", x);
return 0;
}
答案 0 :(得分:3)
要使您的代码正常运行,请
float x;
for(x=.1;x!=1.0;x+=.1)
printf("%f\n", x);
return 0;
需要像
这样的东西float x;
for(x=.1;x < 1.0;x+=.1)
printf("%f\n", x);
return 0;
解释是IEE-754中浮点数的表示,基数2 1/5
是一个重复的分数 - 并且不能精确表示,因此它是四舍五入的。< / p>
答案 1 :(得分:0)
当计算机试图将0.1表示为浮点时,它使用基数2.但是,这不允许精确表示为0.1,只有近似值。当达到第10次迭代时,你有一些非常接近1.0的东西,但不完全是。这会导致!=
计算为true,循环继续。将其从!=
更改为<
,它将正常运行。有关详细信息,请参阅Elliott Frisch的答案中的链接。