无限循环

时间:2012-12-17 12:55:16

标签: c++ for-loop infinite-loop

int i = 0;
double n = 1.24;
    for (; int(n) != n; i++) {
        n *= 10;
    }

为什么进入无限循环?它不应该在两次循环后停止吗?

3 个答案:

答案 0 :(得分:9)

1.24无法完全表示为double。如果您检查n的初始值,您会看到它是1.239999999999999991118215802998747...

为什么循环永不停止,一旦n超过最大double的值,它就会自动转换为+Infinity,这是一个特殊的浮点值。达到该点后,n停止更改,int(n) != n永远无法满足。

答案 1 :(得分:4)

因为double不是数字和条件的精确表示int(n)== n从未达到过。 阅读此http://en.wikipedia.org/wiki/Floating_point

答案 2 :(得分:1)

我已经尝试过了,它在两个循环之后停止了。我用过gcc。 我将int(n)更改为(int)n

由于某些舍入误差而发生无限循环,尝试检查(int)n和n之间的差异

一般情况下,不要同等地使用double检查相等性。改为使用

  

if(fabs(a-b)< 1e-10)//而不是== b