java - Java Math.random 闭双区间
问题描述
如何在 Java 中的闭区间 [x;y] 中生成随机双精度值,例如 [0;10]?的 APIMath.random()
说它返回 [0;1) 中的值,因此乘以 10 没有帮助(以及乘以 11)。
解决方案
编辑:我已经进一步研究了它。
要获得下一个更高的可能双精度值,请使用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
因此,理论上与should相乘Math.random()
会给您一个 [0;10] 范围内的随机数
double randomNumber = Math.random() * (10.0 + Double.MIN_VALUE);
Java 文档Double.MIN_VALUE
:https ://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#MIN_VALUE
推荐阅读
- spring - 使用休眠存储的 LocalDate 错误
- javascript - 替换 DIV 类中的逗号和美元符号
- node.js - 由于“针对不同版本的 Node.js 编译的尖锐模块”,Expo 无法运行
- django - 将嵌套对象序列化为当前父对象的平面属性
- algorithm - 在第三个列表中存在的两个python列表中查找公共索引
- python - 骰子游戏将随机骰子总数添加到变量中
- java - 无法使用 Spring Data JPA 创建 JOIN
- html - 将除第一个孩子之外的所有文本右对齐
- django - 无法使用 upload_to 动态创建路径
- typescript - 如何根据通用类型“T”初始化 TypeORM 存储库?