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

Jus*_*tin 6 java random math precision double

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

das*_*ght 6

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

参考文献:IEEE-754计算器.


Sol*_*low 5

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

该函数的名称有点用词不当. Math.nextAfter(a, 1.0)返回大于的最小double值a(即,之后的下一个值a),并Math.nextAfter(a, -1.0)返回小于a的最大值(即之前 的值a).

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