Java:Math.random()最大值(double只小于1)

时间:2013-04-01 02:28:15

标签: java math random double precision

我对此有点好奇。 Math.random()给出一个[0.0,1.0]范围内的值。那么它可以给出的最大价值是什么呢?换句话说,1.0的最接近的double值是小于1.0?

3 个答案:

答案 0 :(得分:6)

Java使用64位IEEE-754表示,因此小于1的最接近的数字在十六进制表示中理论上为3FEFFFFFFFFFFFFF,对于符号为0,对于指数为-1,对于52为1.9999999999999997位有效数。这相当于大约0.9999999999999998

参考文献:IEEE-754 Calculator

答案 1 :(得分:5)

您需要的号码由Math.nextAfter(1.0, -1.0)返回。

该功能的名称有点用词不当。 Math.nextAfter(a, 1.0)返回大于a的最小double值(即a之后的下一个值),Math.nextAfter(a, -1.0)返回小于{{1}的最大值(即 a之前的值。)

注意:另一张海报说a。那是错的。 1.0-Double.MIN_NORMAL完全等于1.0。

答案 2 :(得分:-3)

双精子的最小正值是Double.MIN_NORMAL。因此,小于1.0的最大数字是1.0-Double.MIN_NORMAL

Double.MIN_NORMAL等于2 -1022 ,因此答案仍接近1.0。您需要将1.0-Double.MIN_NORMAL的值打印到308个小数位,然后才能看到除9之外的任何内容。