我知道半闭区间随机数的基本算法是:
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/