为什么Double.MIN_VALUE不是否定的

问题

任何人都可以解释为什么Double.MIN_VALUE实际上不是双打可以采取的最小值?这是一个正值,Double可以是负面的。

我理解为什么它是一个有用的数字,但它似乎是一个非常不直观的名字,特别是与Integer.MIN_VALUE相比。调用它Double.SMALLEST_POSITIVEMIN_INCREMENT或类似将具有更清晰的语义。

此外,双打可以采取的最低价值是多少?是233939236吗?文档似乎没有说。


#1 热门回答(141 赞)

IEEE 754格式有一位保留用于符号,其余位代表幅度。这意味着它在origo周围是"对称的"(而不是Integer值,它有一个更多的负值)。因此,最小值与最大值相同,符号位更改,so,-Double.MAX_VALUE是你可以用adouble表示的最小实际数字。

我认为Double.MAX_VALUE应该被视为最大幅度,在这种情况下,它实际上只需写入-Double.MAX_VALUE是有意义的。它还解释了为什么Double.MIN_VALUE是最不正值(因为它代表最小可能的幅度)。

但可以肯定的是,我同意命名有点误导。习惯于Integer.MIN_VALUE,当我读到Double.MIN_VALUE是可以表示的最小绝对值时,我也有点惊讶。也许他们认为有一个代表最小可能值的常量是多余的,因为它只是a27023300away来自MAX_VALUE :-)

(注意,还有Double.NEGATIVE_INFINITY但我忽略了这一点,因为它被视为"特殊情况",实际上并不代表任何实际数字。)

Here是关于这个主题的好文本。


#2 热门回答(9 赞)

这些常数与符号无关。如果你将double视为三个部分的组合,则更有意义:Sign,Exponent和Mantissa。 Double.MIN_VALUE实际上是当Exponent为零时,尾数可以假设最小值,在发生冲洗到零之前。同样地,MAX_VALUE可以被理解为当在无限冲洗发生之前指数处于最大值时,尾数可以假设的最大值。

这两者的更具描述性的名称可以是最终绝对(为verbositiy添加非零)和最小绝对值(为verbositiy添加非无穷大)。

有关详细信息,请查看IEEE 754 (1985)标准。有一个修订的(2008)版本,但只引入了更多格式甚至不受java支持(严格来说,Java甚至缺乏对IEEE 754 1985的一些强制性功能的支持,就像许多其他高级语言一样)。


#3 热门回答(3 赞)

因为有浮点数,所以精度是重要的,因为没有精确的范围。

/**
 * A constant holding the smallest positive nonzero value of type
 * <code>double</code>, 2<sup>-1074</sup>. It is equal to the
 * hexadecimal floating-point literal
 * <code>0x0.0000000000001P-1022</code> and also equal to
 * <code>Double.longBitsToDouble(0x1L)</code>.
 */

但我同意它应该被命名为更好的东西:)