ric*_*i90 2 java random intervals
我知道半闭区间内随机数的基本算法是:
Random rand = new Random();
double increment = min + (max - min) * rand.nextDouble();
Run Code Online (Sandbox Code Playgroud)
这将在间隔上给出一个随机数,[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();
Run Code Online (Sandbox Code Playgroud)
实际上,乘法后的舍入可能仍然会导致min返回,因此重试循环会更好.鉴于确切min价值的罕见性,性能不会受到影响.
double increment;
do {
increment = min + (max - min) * rand.nextDouble();
} while (increment <= min || increment >= max);
Run Code Online (Sandbox Code Playgroud)
只是为了它,我还添加了一张max支票.
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |