<分区>
我目前正在学习 java float 。我知道, float 有一定数量的重要数字。我也知道, float 在 Java 中表示为 -1 或 1 * num * 10^x。其中 num 是数字,10^x 是小数点。但是在这里我们没有数字的一小部分。这里怎么可能出现无限循环?
死循环代码:
float f = 123456789;
while (f-- > 0) {
System.out.println(f);
}
<分区>
我目前正在学习 java float 。我知道, float 有一定数量的重要数字。我也知道, float 在 Java 中表示为 -1 或 1 * num * 10^x。其中 num 是数字,10^x 是小数点。但是在这里我们没有数字的一小部分。这里怎么可能出现无限循环?
死循环代码:
float f = 123456789;
while (f-- > 0) {
System.out.println(f);
}
最佳答案
这是关于浮点运算的。当您递减数字时,您偶然发现当您遍历数字 f = 1.23456792E8
时,一切都出错了,因为 f-1
和 f
这里有相同的浮点表示。所以递减使数字成为它自己,这导致了无限循环。只需检查:
System.out.println(1.23456792E8f);
System.out.println(1.23456792E8f - 1);
这个数字有什么特别之处,为什么执行会停在那里?这是因为123456789
的浮点表示是1.23456792E8
。由于 float 缺乏精度,这已经给了我们至少 3
的差距。使用 double
而不是 float
可以使程序完成,但问题会出现在更大的数字上。
关于Java - 带 float 的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41414694/