任何人都可以了解为什么Double.MIN_VALUE
实际上不是双打可以采取的最小值?这是一个正值,Double可以是负面的。
我理解为什么它是一个有用的数字,但它似乎是一个非常不直观的名称,特别是与Integer.MIN_VALUE
相比时。将其称为Double.SMALLEST_POSITIVE
或MIN_INCREMENT
或类似内容将具有更清晰的语义。
此外,双打可以采取的最低价值是多少?是-Double.MAX_VALUE
吗?文档似乎没有说。
答案 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以获取浮点值。
认为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的那些。请参阅this和this。