如何在 Java 中生成闭区间 [x;y] 内的随机 double 值,例如 [0;10]? Math.random()
的 API 表示它返回 [0;1) 中的值,因此乘以 10 没有帮助(以及乘以 11)。
最佳答案
编辑:我已经进一步研究过。
要获取下一个可能更高的 double 值,请使用 Math.ulp(double)
。
double number = 10.0 + Math.ulp(10.0);
10.0
的下一个较高值是 10.000000000000002
如果是随机数生成:
double randomNumber = Math.random() * (10.0 + Math.ulp(10.0));
https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#ulp(double)
<小时/>我的旧理论并不正确:
2e-1074
是 double 类型的最小正非零值。
其常量是Double.MIN_VALUE
。因此,将 10 + 2e-1074
与 Math.random()
相乘理论上应该会得到一个 [0;10] 范围内的随机数
double randomNumber = Math.random() * (10.0 + Double.MIN_VALUE);
Double.MIN_VALUE
的 Java 文档:https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#MIN_VALUE
关于Java Math.random 闭双区间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58920019/