[英]Java Random double in interval [-1000, 1000]
在java中我有:
Random random = new Random();
double randomNum = random.nextDouble();
它創建了一個介於 0 和 1 之間的隨機數。但是我想要一個介於 -1000 和 1000 之間的數字,我該如何縮放呢?
謝謝
2種可能性:
請注意,可能性2確保了更好的隨機性和更好的“密度”,以2次隨機調用為代價[如果這是一個問題,這可能是擴展性的]。
嗯,數學?
double randomNum = (random.nextDouble()-0.5d) * 2000;
Random random = new Random();
double randomNum = (random.nextDouble() * 2000.0d) - 1000.0d;
public static double randomInterval(double minValue,double maxValue){
Random random = new Random();
double r;
do {
r = random.nextDouble();
} while (r < minValue || r >= maxValue);
return r;
}
double a = randomInterval(-1000,1000) ;
試試這個算法:
這會為您提供該范圍內的數字
double randomNum = (random.nextDouble() * 2000) -1000;
Random random = new Random();
int randomNum = random.nextInt(2000) - 1000;
這是一個通用函數,您可以使用val01
零到一( val01
)之間的數字線性重新縮放到不同的范圍( min
.. max
):
public static double rescale(double val01, double min, double max) {
return val01 * (max - min) + min;
}
public static double doubleBetween(double start, double end) {
Random random = new Random();
// We need 64 bits because double have 53 bits precision, so int is too short
// We have now a value between 0 and Long.MAX_VALUE.
long value = -1L;
while (value < 0)
value = Math.abs(random.nextLong()); // Caution, Long.MIN_VALUE returns negative !
// Cast to double
double valueAsDouble = (double) value;
// Scale so that Long.MAX_VALUE is exactly 1 !
double diff = (end-start)/(double) Long.MAX_VALUE;
return start + valueAsDouble*diff;
}
這將給出正確的間隔,包括兩端的全雙精度。 雙精度具有一個特殊的-0.0值(負零),該程序不會給出該值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.