为什么Double.MIN_VALUE不是负面的

谁能澄清一下为什么Double.MIN_VALUE实际上不是Double.MIN_VALUE可以采用的最小值? 这是一个积极的价值,双打当然可以是负面的。

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

另外,Doubles可以使用的最小值是多less? 是-Double.MAX_VALUE ? 文件似乎并没有说。

IEEE 754格式为符号保留一位,其余位表示幅度。 这意味着它在原点周围是“对称的”(与整数值相反,它们有一个负值)。 因此,最小值与最大值是一样的,符号位发生了变化,所以是的-Double.MAX_VALUE是可以用double表示的最小可能实际数。

我认为Double.MAX_VALUE应该被看作是最大值 ,在这种情况下,简单地写-Double.MAX_VALUE 。 这也解释了为什么Double.MIN_VALUE是最不积极的价值(因为这代表了可能的最小幅度)。

但是当然,我同意命名有点误导。 习惯了Integer.MIN_VALUE的含义,当我读到Double.MIN_VALUE是可以表示的最小绝对值时,我也感到有些惊讶。 也许他们认为有一个常数代表最不可能的价值是多余的,因为它只是远离MAX_VALUE 🙂

(注意,也有Double.NEGATIVE_INFINITY但是我不理会这个,因为它被视为“特殊情况”,实际上并不代表任何实际的数字。)

这是一个关于这个问题的好文本。

这些常数与符号无关。 如果您将双重视为由三部分组成的复合体,则更有意义:符号,指数和尾数。 Double.MIN_VALUE实际上是在指数处于最小值的情况下尾数可能出现的最小值。 同样地,MAX_VALUE可以理解为当指数在冲洗到无穷大之前处于最大值时尾数可以承担的最大值。

这两个名称更具描述性,可以是最大绝对值 (对于verbositiy,加上非零值)和最小绝对值 (对于verbositiy,加上非无穷大)。

详情请参阅IEEE 754(1985)标准。 有一个修订版(2008)的版本,但只引入更多的格式,甚至不支持的Java(严格来说,即使缺乏支持IEEE 754 1985的一些强制性function,像许多其他高级语言)。

因为使用浮点数, 精度是重要的,因为没有确切的范围

 /** * 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>. */ 

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

Double的最小值是Double.NEGATIVE_INFINITY ,这就是为什么Double.MIN_VALUE不是Double的最小值。

由于double是浮点数,所以只能有最大数目(精度较低)或最接近0(精度很高)。

如果你真的想要一个非常小的double值,那么你可以使用-Double.MAX_VALUE

我假设混淆的名字可以追溯到C ,它将FLT_MIN定义为最小的正数。

就像在Java中一样,您必须使用-Double.MAX_VALUE ,您必须使用-FLT_MAX来获取C中最小的浮点数。