为什么这个循环的行为会根据 int 值而有所不同?

问题描述 投票:0回答:1

我试图理解为什么这个 while 循环有时会迭代 16 次,有时是无限循环(例如,当 i == 10^8 时),有时根本不迭代(例如,当 i == 10^9 时)。

#include <iostream>

using namespace std;

int main() {
    int i;
    cin >> i;
    float x = i;
    while (x < (float)(i + 16)) {
        cout << x << endl;
        x++;
    }

    return 0;
}

我尝试将浮点数转换为二进制 IEE 754 表示形式,但仍然找不到答案为什么会发生这种情况。

c++ c while-loop casting type-conversion
1个回答
0
投票

因为100000000和100000001在float32中的表示相同。 但 100000000 和 100000016 还没有。

因此,您进入了循环,但随后

++
无效。

另一方面 1000000000 和 1000000016 在 float32 中具有相同的表示形式。所以你甚至不进入循环。

© www.soinside.com 2019 - 2024. All rights reserved.