有人能解释一下为什么Double.MIN_VALUE
实际上不是Double可以取到的最小值吗?它是一个正数,而Double当然可以是负数。
我明白它为什么是一个有用的数字,但与Integer.MIN_VALUE
相比,它似乎是一个非常不直观的名称。将其称为Double.SMALLEST_POSITIVE
或MIN_INCREMENT
等名称将更具语义清晰性。
此外,Doubles可以取到的最小值是多少?是-Double.MAX_VALUE
吗?文档似乎没有提到。
有人能解释一下为什么Double.MIN_VALUE
实际上不是Double可以取到的最小值吗?它是一个正数,而Double当然可以是负数。
我明白它为什么是一个有用的数字,但与Integer.MIN_VALUE
相比,它似乎是一个非常不直观的名称。将其称为Double.SMALLEST_POSITIVE
或MIN_INCREMENT
等名称将更具语义清晰性。
此外,Doubles可以取到的最小值是多少?是-Double.MAX_VALUE
吗?文档似乎没有提到。
SmallestNonzeroFloat64
。 - aioobe这些常量与符号无关。如果将double视为三个部分的组合:符号、指数和尾数,则更有意义。 Double.MIN_VALUE实际上是指数在最小值时尾数可以采用的最小值,之后发生向零溢出。同样,MAX_VALUE可以理解为指数在最大值时尾数可以采用的最大值,然后发生向无穷大溢出。
对于这两个常量,一个更具描述性的名称可以是最大绝对值(为了冗长可以添加非零)和最小绝对值(为了冗长可以添加非无穷大)。
有关详细信息,请参见IEEE 754(1985)标准。有一种修订版(2008),但它只引入了更多格式,甚至没有被Java支持(严格来说,Java甚至缺少对IEEE 754 1985的某些强制性功能的支持,就像许多其他高级语言一样)。
双精度浮点数的最小值为Double.NEGATIVE_INFINITY
,这就是为什么Double.MIN_VALUE
并不是Double
的真正最小值。
由于双精度浮点数是浮点数,因此您只能拥有最大的数字(具有较低的精度)或最接近0的数字(具有更高的精度)。
如果您确实想要一个非无穷大的双精度浮点数最小值,则可以使用-Double.MAX_VALUE
。
Double.MIN_VALUE
可能等于 Double.NEGATIVE_INFINITY
。 - starblueDouble.POSITIVE_INFINITY
,+∞ > 一切,而—∞ < 一切。 - Colin HebertDouble.POSITIVE_INFINITY
。 - starblueDouble.NEGATIVE_INFINITY < Double.NEGATIVE_INFINITY
是false(显然),但是Double.NEGATIVE_INFINITY <= Double.NEGATIVE_INFINITY
是true(显然)。 - aioobe由于浮点数没有精确的范围,因此其精度是重要的。
/**
* 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、最小的正数非零值2^(-1074)。
关键在于我们谈论的是浮点数表示。double数据类型是双精度64位IEEE 754浮点数。浮点数可以轻松地表示从1,000,000,000,000到0.0000000000000001的数字,并在两端最大化精度(数字的位数)。 (更多内容请参见此处)
尾数始终为正数,它包含浮点数的有效数字。指数表示尾数和符号应该乘以基数的正或负幂。这四个组成部分按照以下方式组合以获得浮点值。
认为MIN_VALUE是尾数可以表示的最小值。浮点表示的最小值是使用该值可以表示的最小大小。(可能应该使用更好的名称以避免这种混淆)
writeBytes
,但它却接受一个String
。 - Hakanai