我对此有点好奇。 Math.random()给出一个[0.0,1.0]范围内的值。那么它可以给出的最大价值是什么呢?换句话说,1.0的最接近的double值是小于1.0?
答案 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之外的任何内容。