Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Double.MIN_值不是负值_Java_Numbers_Floating Point - Fatal编程技术网

Java 为什么Double.MIN_值不是负值

Java 为什么Double.MIN_值不是负值,java,numbers,floating-point,Java,Numbers,Floating Point,谁能解释一下为什么Double.MIN\u值实际上不是Double可以接受的最小值?它是一个正值,双精度当然可以是负值 我理解为什么它是一个有用的数字,但它似乎是一个非常不直观的名称,尤其是与Integer.MIN_VALUE相比。称之为Double.minimum\u POSITIVE或MIN\u INCREMENT或类似的将具有更清晰的语义 另外,Double可以接受的最小值是多少?是否为-Double.MAX_值?文档似乎没有说。双精度的最小值是double。负无限这就是为什么double

谁能解释一下为什么
Double.MIN\u值实际上不是Double可以接受的最小值?它是一个正值,双精度当然可以是负值

我理解为什么它是一个有用的数字,但它似乎是一个非常不直观的名称,尤其是与
Integer.MIN_VALUE
相比。称之为
Double.minimum\u POSITIVE
MIN\u INCREMENT
或类似的将具有更清晰的语义


另外,Double可以接受的最小值是多少?是否为
-Double.MAX_值
?文档似乎没有说。

双精度的最小值是
double。负无限
这就是为什么
double。最小值不是
double
的最小值

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


如果你真的想要一个不是无穷大的double的最小值,那么你可以使用
-double.MAX_value

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


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

IEEE 754格式为符号保留了一位,其余的位表示大小。这意味着它是围绕origo“对称”的(与整数值相反,整数值又有一个负值)。因此,随着符号位的改变,最小值与最大值完全相同,因此yes
-Double。MAX_value
是可以用
Double
表示的最小实际数


我认为
Double.MAX\u值
应该被视为最大值,在这种情况下,只需编写
-Double.MAX\u值
就可以了。它还解释了为什么
Double.MIN_值
是最小的正值(因为它代表了最小的可能大小)


当然,我同意这个名字有点误导。习惯了Integer.MIN_VALUE的含义,当我读到Double.MIN_VALUE是可以表示的最小绝对值时,我也有点惊讶。也许他们认为用一个表示最小可能值的常数是多余的,因为它只是一个远离最大值的
-

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


这些常数与符号无关。如果你把一个“双”作为三个部分的组合:符号、指数和尾数,这就更有意义了。 Double.MIN_值实际上是指在齐平到零之前,当指数处于最小值时尾数可以假定的最小值。同样地,MAX_值可以理解为尾数的最大值,当指数处于最大值时,尾数可以假定,然后冲入无穷大

这两个更具描述性的名称可以是最大绝对值(verpositiy加非零)和最小绝对值(verpositiy加非无穷大)


有关详细信息,请查看标准。有一个修订版(2008年),但它只引入了更多甚至不受java支持的格式(严格来说,java甚至不支持IEEE 754 1985的一些强制性功能,就像许多其他高级语言一样)。

我假设混淆的名称可能是,它被定义为最小的正数

就像在Java中,您必须使用
-Double.MAX_VALUE
,您必须使用以获得C中最小的浮点值。

Double.MIN_值是一个常数,它包含Double类型2^(-1074)的最小正值非零值

这里的诀窍是我们讨论的是浮点数表示法。双精度数据类型是双精度64位IEEE 754浮点。浮点数表示从100000000000.0000000000001的数字,同时最大化刻度两端的精度(位数)。(详情请参阅)

尾数始终为正数,包含浮点数的有效数字。指数表示尾数和符号应乘以的基数的正幂或负幂。将这四个组件组合起来以获得浮点值

认为minu值是尾数可以表示的最小值。因为浮点表示法的最小值是可以用它表示的最小值。(本可以用一个更好的名字来避免这种混淆)

123>10>1>0.12>0.012>0.0000123>0.000000001>0.0000000000000001


以下仅供参考


双精度浮点可以表示从2^-1074到2^1023的2098次二的幂。二的非规范化幂是从2^-1074到2^-1023的幂;2的归一化幂是从2^-1022到2^-1023的幂。请参阅和。

好,但是为什么使用Double.MAX\u值有意义呢?这似乎定义得很清楚。因为它是最大精确值(非无穷大),而不是它的符号。按照这个想法,它是双精度的最大值。最大值还是双精度。正无穷大?
Double。最小值可以等于
Double.NEGATIVE无穷大
@starblue,no.@mo seph,
Double.正无穷大
+∞ > 一切和-∞ < everything@Colin赫伯特,你可能误解了我。在一个更好的世界中,
Double.MIN_值
将等于
Double.NEGATIVE_无穷大
,因为这样它将与
MIN_值一致
/**
 * 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>.
 */