C ++进行循环练习

时间:2018-11-12 09:15:34

标签: c++ for-loop

在下面您可以找到带有for循环的基本C ++练习,问题是:循环运行后i的值是多少。 (显然,该值为5。)

我的问题是,在第5次运行(i = 5)时,a的值为100,因为条件a <100,循环是否应该停止? a乘以10后不检查条件吗? (因此a已经是100之后)

如果我在循环退出后检查a的值,它将是1000。我很困惑。为什么循环不止于100?

#include <iostream>
using namespace std;
int main(void) {
    float a;
    int i = 0;
    for(a = 0.01; a < 1e2; a *= 1e1)
        ++i;

    return 0;
}

2 个答案:

答案 0 :(得分:7)

该练习旨在显示float(和double等,通常是浮点数)不具有您所看到的确切十进制值程序文本。

0.01(十进制)不能以所使用的二进制浮点格式精确表示,因此将10乘以五将不能得到准确的100.0

另请参阅:Floating point inaccuracy examples

答案 1 :(得分:2)

如果不知道平台上的浮点实现的详细信息,就无法确切知道此代码将发生什么; C ++标准使此刻意灵活。

实质上,0.01可以是最接近float文字的double的近似值。因此可以提前或以其他方式满足停止条件a < 1e2

请注意,0.011e1一起是类型为double的文字。

因此,向float的转换使事情变得更加复杂。然后要考虑浮点严格度

简而言之:不要在循环中使用浮点作为“索引”。