谁能解释一下为什么Double.MIN_VALUE
双打实际上不是最小值?这是一个正值,Double 当然可以是负值。
我理解为什么它是一个有用的数字,但它似乎是一个非常不直观的名称,尤其是与Integer.MIN_VALUE
. 调用它Double.SMALLEST_POSITIVE
或MIN_INCREMENT
类似的会有更清晰的语义。
另外,双打可以取的最小值是多少?是-Double.MAX_VALUE
吗?文档似乎没有说。
谁能解释一下为什么Double.MIN_VALUE
双打实际上不是最小值?这是一个正值,Double 当然可以是负值。
我理解为什么它是一个有用的数字,但它似乎是一个非常不直观的名称,尤其是与Integer.MIN_VALUE
. 调用它Double.SMALLEST_POSITIVE
或MIN_INCREMENT
类似的会有更清晰的语义。
另外,双打可以取的最小值是多少?是-Double.MAX_VALUE
吗?文档似乎没有说。
IEEE 754 格式为符号保留一位,其余位表示幅度。这意味着它在 origo 周围是“对称的”(与整数值相反,整数值多了一个负值)。因此,最小值与最大值相同,只是符号位发生了变化,所以是的,-Double.MAX_VALUE
是您可以用 a 表示的最小可能实际数字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 可以理解为当指数处于最大值时,尾数可以假设的最大值,然后发生刷新到无穷大。
这两个更具描述性的名称可能是最大绝对值(为详细程度添加非零)和最小绝对值(为详细程度添加非无穷大)。
详情请查看IEEE 754 (1985)标准。有一个修订版(2008 年),但只引入了更多 java 甚至不支持的格式(严格来说,java 甚至不支持 IEEE 754 1985 的一些强制性特性,就像许多其他高级语言一样)。
double 的最小值Double.NEGATIVE_INFINITY
就是为什么Double.MIN_VALUE
不是 a 的最小值Double
。
由于 double 是浮点数,您只能使用最大的数字(精度较低)或最接近 0 的数字(精度很高)。
如果你真的想要一个不是无穷大的 double 的最小值,那么你可以使用-Double.MAX_VALUE
.
因为对于浮点数,精度很重要,因为没有精确的范围。
/**
* 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.MIN_VALUE 是一个常量,包含 double 类型的最小POSITIVE非零值 2^(-1074)。
这里的诀窍是我们谈论的是浮点数表示。双精度数据类型是双精度 64 位 IEEE 754 浮点数。浮点数可以轻松地表示从1,000,000,000,000到0.0000000000000001的数字,同时最大限度地提高刻度两端的精度(位数)。(更多参考这个)
尾数始终为正数,保存浮点数的有效数字。指数表示尾数和符号应乘以的基数的正或负幂。这四个分量组合如下,得到浮点值。
认为 MIN_VALUE 是尾数可以表示的最小值。由于浮点表示的最小值是可以使用它表示的最小幅度。(虽然可以使用更好的名称来避免这种混淆)
123 > 10 > 1 > 0.12 > 0.012 > 0.0000123 > 0.000000001 > 0.0000000000000001
以下仅供参考。
双精度浮点数可以表示 2,098 的 2 次方,从 2^-1074 到 2^1023。2 的非规格化幂是从 2^-1074 到 2^-1023 的幂;2 的归一化幂是从 2^-1022 到 2^1023 的幂。参考这个和这个。