为什么Double.MIN_VALUE不是否定的

时间:2010-10-07 18:44:12

标签: java numbers floating-point

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

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

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

6 个答案:

答案 0 :(得分:156)

IEEE 754格式有一位保留用于符号,其余位代表幅度。这意味着它在origo周围是“对称的”(而不是Integer值,它有一个更多的负值)。因此,最小值与最大值完全相同,符号位发生变化,因此-Double.MAX_VALUE是您可以用{{1}表示的最小可能实际数字}。

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

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

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

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

答案 1 :(得分:10)

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

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

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

答案 2 :(得分:3)

我认为令人困惑的名称可以是traced back to C,它将FLT_MIN定义为最小的正数。

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

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:1)

双精度值的最小值为Double.NEGATIVE_INFINITY,这就是Double.MIN_VALUE实际上不是Double的最小值的原因。

由于double是浮点数,因此您只能拥有最大数字(精度较低)或最接近数字0(具有很高的精度)。

如果您真的想要一个非无穷大的双精度值,那么您可以使用-Double.MAX_VALUE

答案 5 :(得分:-1)

documents中所说,

  

Double.MIN_VALUE是一个常量,包含double类型的最小 POSITIVE 非零值,2 ^( - 1074)。

这里的技巧是我们正在讨论浮点数表示。双数据类型是双精度64位IEEE 754浮点。浮点数表示从 1,000,000,000,000 0.0000000000000001 的数字,并且最大化了比例两端的精度(位数)。 (更多参考this

尾数,始终为正数,保留浮点数的有效数字。指数表示尾数和符号应乘以的基数的正或负功率。这四个组件组合为follows以获取浮点值。

enter image description here

认为MIN_VALUE是尾数可以表示的最小值。由于浮点表示的最小值是可以使用它表示的最小量值。 (虽然可以使用更好的名称来避免这种混淆)

  

123&gt; 10> 1> 0.12> 0.012> 0.0000123&gt; 0.000000001&gt; 0.0000000000000001

以下是仅供参考。

双精度浮点数可以代表2,098次幂,从2 ^ -1074到2 ^ 1023。两个的非规范化幂是从2 ^ -1074到2 ^ -1023的那些;两个归一化的幂是从2 ^ -1022到2 ^ 1023的那些。请参阅thisthis