java min value_java - 为什么Double.MIN_VALUE不是否定的

java - 为什么Double.MIN_VALUE不是否定的

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

我理解为什么它是一个有用的数字,但它似乎是一个非常不直观的名称,特别是与-Double.MAX_VALUE相比。调用它Double.SMALLEST_POSITIVE或MIN_INCREMENT或类似将有更清晰的语义。

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

6个解决方案

149 votes

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

我认为Double.NEGATIVE_INFINITY应被视为最大幅度,在这种情况下,它实际上只需写入Double.MIN_VALUE是有意义的。它还解释了为什么-是最小正值(因为它代表最小可能的幅度)。

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

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

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

aioobe answered 2019-05-18T04:19:34Z

9 votes

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

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

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

Durandal answered 2019-05-18T04:20:29Z

3 votes

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

/**

* A constant holding the smallest positive nonzero value of type

* double, 2-1074. It is equal to the

* hexadecimal floating-point literal

* 0x0.0000000000001P-1022 and also equal to

* Double.longBitsToDouble(0x1L).

*/

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

John Gardner answered 2019-05-18T04:21:05Z

2 votes

我假设这些令人困惑的名字可以追溯到C,它将-FLT_MAX定义为最小的正数。

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

Philipp Claßen answered 2019-05-18T04:21:41Z

1 votes

双精度数的最小值是-Double.MAX_VALUE这就是为什么Double.MIN_VALUE实际上并不是Double的最低值。

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

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

Colin Hebert answered 2019-05-18T04:22:26Z

-1 votes

正如文件中所说,

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

这里的诀窍是我们正在讨论浮点数表示。 双数据类型是双精度64位IEEE 754浮点。 浮点表示容易从1,000,000,000,000到0.0000000000000001的数字,同时最大化比例两端的精度(位数)。 (有关更多信息,请参阅此

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

DhEI8.jpg

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

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

以下是仅供参考。

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

prime answered 2019-05-18T04:23:51Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值