Java float 说明

标签 java floating-point

我正在阅读 Joshua Bloch 的Java 益智游戏。在拼图 28 中,我无法理解以下段落-

This works because the larger a floating-point value, the larger the distance between the value and its successor. This distribution of floating-point values is a consequence of their representation with a fixed number of significant bits. Adding 1 to a floating-point value that is sufficiently large will not change the value, because it doesn't "bridge the gap" to its successor.

  1. 为什么 float 越大,其值与后继值之间的距离就越大?
  2. 如果是Integer,我们加一得到下一个Integer,但是如果是float,我们如何得到下一个 float 值?如果我有 IEEE-754 格式的浮点值,我是否将尾数部分加 1 以获得下一个 float ?

最佳答案

想象一个基于十进制的格式,您只能设置前 5 个值(即您的尾数长度为 5)。对于小数字你会没事的: 1.0000, 12.000, 125.00

但是对于更大的数字,您将不得不开始截断,例如 1113500。下一个可表示的数字是 1113600,它大了 100。介于两者之间的任何值都不能用这种格式表示。如果您正在读取此范围内的值,则必须截断它 - 找到最接近匹配的表示,即使它不准确。

数字越大,问题越严重。如果我达到 34567800000,那么下一个可表示的数字将是 34567900000,即 1000000 或 100 万的差距。这样,您可以看到表示之间的差异取决于大小。

在另一个极端,对于小值 0.0001,下一个可表示值是 0.0002,因此差距仅为 0.0001。

浮点值具有相同的原理,但使用二进制编码(2 的幂而不是 10 的幂)。

关于Java float 说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18109463/

相关文章:

java - 处理一个大文本文件需要多长时间?

java - java 中文本字段的准备语句

java - 在 Java 中,进行数组边界检查的最易读的方法是什么?

python - 为什么 Python 中的 float 对象没有分母属性,而 int 有?

java - 生成病态数据以测试浮点求和

java - Webdriver - 无法定位元素(Java)

java - NOT 表达式的正则表达式帮助

parsing - attoparsec 错误解析 double

python浮点错误

c - 浮点运算的精度