Java浮点是基于IEEE 754二进制浮点标准
Floating Point Standard,其第一个版本是在1985年左右发布的,因此它比Java要老得多。鉴于Java 754被定义时的广泛的硬件实现,Java创建者没有什么选择。
每个IEEE 754浮点数有三个分量,一个符号位,一个指数和一个尾数。大大简化,正常数量的大小是:
mantissa * (2 ** exponent)
其中“**”表示功率。
前导位是符号位。在双精度中,接下来的11位是指数。
具有所有指数位的位模式保留用于无穷大和NaN。所有正常数字在指数中至少有一个零位。这两个无穷大是通过使所有指数位开启,并且所有尾数位为零来表示的。前导符号位区分正和负无穷大。
对于特殊情况,所有指数位的选择不是任意的。与处理数字范围中间的间隙相比,更容易切断极值,特别是对于硬件实现。对于特殊情况取指数的所有位将防止编码零,所有位关闭模式,并且将给出最大的绝对幅度值,无穷大,最小指数,这也将使硬件更复杂。指数上的所有位肯定是无穷大的最佳选择。
这两个无穷大都用于表示两个事实,实际上无限的结果和结果在绝对幅度上太大,不能在正常数字系统中表示大于Double.MAX_VALUE或小于-Double.MAX_VALUE的数字。 1.0 / 0.0是无穷大。所以是2 * Double.MAX_VALUE。
有一些算法可以简化,通过允许中间结果无限,在任何意义上的较少特殊情况。这样做也允许例如。甚至平行于y轴的线具有可以在计算中使用的可存储的梯度。