我试图理解为什么这个 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 表示形式,但仍然找不到答案为什么会发生这种情况。
因为100000000和100000001在float32中的表示相同。 但 100000000 和 100000016 还没有。
因此,您进入了循环,但随后
++
无效。
另一方面 1000000000 和 1000000016 在 float32 中具有相同的表示形式。所以你甚至不进入循环。