java - 如何在开区间 (x, y) 上获得下一个随机 double 值

标签 java random intervals

我知道半闭区间随机数的基本算法是:

Random rand = new Random();
double increment = min + (max - min) * rand.nextDouble();

这会给你一个区间 [min, max) 上的随机数,因为 nextDouble在它返回的结果范围 ([0.0,1.0)) 中包含 0。有没有一种好方法可以排除最小值,而是在 (min, max) 上提供一个随机数?

最佳答案

理论上,调用Math.nextUp(double d)应该这样做。

double minUp = Math.nextUp(min);
double increment = minUp + (max - minUp) * rand.nextDouble();

实际上,乘法后的舍入可能仍会导致返回 min,因此重试循环会更好。鉴于精确的 min 值很少见,性能不会受到影响。

double increment;
do {
    increment = min + (max - min) * rand.nextDouble();
} while (increment <= min || increment >= max);

为了解决这个问题,我还添加了一个max 检查。

关于java - 如何在开区间 (x, y) 上获得下一个随机 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39622763/

相关文章:

python - 随机选择非唯一最大值的argmax

python - Random.choices 不返回均匀分布

java - 如何在 gradle 中获取 spring-boot 依赖版本?

java - 如何在 map 中找到一个点并左右搜索

mysql - 如何显示来自mysql的随机自动旋转数据?

algorithm - 查找一组间隔的覆盖范围

MYSQL 间隔 - future 一年中一周中的同一天

java - Java 中的日期间隔加法和减法

java - 有没有办法使用Java中的Azure Functions的@EventHubTrigger来获取事件(EventHub)的标题数据?

java - 字符串[][]输出问题