Java - 带 float 的无限循环

标签 java while-loop infinite-loop

<分区>

我目前正在学习 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-1f 这里有相同的浮点表示。所以递减使数字成为它自己,这导致了无限循环。只需检查:

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/

相关文章:

java - Redis:具有大小限制和 LRU 驱逐功能的 HashMap

c - 我如何让 sum 发挥作用?

c# - 如何检测到 StackOverflowException?

java - 卡住的 While 循环 (Java)

c - 如何将我的服务器作为守护进程运行?

java - 低内存 Java 应用服务器

java - 如何使用 Java 从 Sqlite3 数据库中获取解析后的数据?

java - Java 中 JSON 嵌套数据创建失败

c++ - 从没有空格的文本文件中读取数字

python - While 循环在满足条件时不会终止