无限循环

fpi*_*o07 1 c++ for-loop infinite-loop

int i = 0;
double n = 1.24;
    for (; int(n) != n; i++) {
        n *= 10;
    }
Run Code Online (Sandbox Code Playgroud)

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

NPE*_*NPE 9

1.24不能完全表示为a double.如果你检查它的初始值n,你会发现它是1.239999999999999991118215802998747...

至于循环永不停止的原因,一旦n超过最大值double,它就会自动转换为+Infinity特殊的浮点值.一旦达到这一点,n停止改变,int(n) != n永远不会满足.

  • @ fpiro07因为`0.5`*可以*完全表示(`0.5 == 2 ^ -1`) (3认同)