使用不相等时无限“for”循环

时间:2014-09-06 04:27:51

标签: c for-loop floating-point

嗨,这肯定很简单,但我找不到为什么这不会在0.9之后退出循环的答案

    #include <stdio.h>

    int main()
    {
            float x;
            for(x=.1;x!=1.0;x+=.1)
            printf("%f\n", x);
            return 0;
    }

2 个答案:

答案 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的答案中的链接。