在java中我有:
Random random = new Random();
double randomNum = random.nextDouble();
创建一个介于0和1之间的随机数。但是我想要一个介于-1000和1000之间的数字,我该如何缩放呢?
由于
答案 0 :(得分:5)
2种可能性:
请注意,可能性2确保您的数字更好的随机性和更好的“密度”,代价是2次随机调用[如果这是一个问题,可能会扩展]。
答案 1 :(得分:1)
double randomNum = (random.nextDouble()-0.5d) * 2000;
答案 2 :(得分:1)
Random random = new Random();
double randomNum = (random.nextDouble() * 2000.0d) - 1000.0d;
答案 3 :(得分:0)
试试这个算法:
答案 4 :(得分:0)
这会为您提供该范围内的数字
double randomNum = (random.nextDouble() * 2000) -1000;
答案 5 :(得分:0)
Random random = new Random();
int randomNum = random.nextInt(2000) - 1000;
答案 6 :(得分:0)
以下是一个常规函数,可用于将0到1之间的数字(val01
)线性重新缩放到不同的范围(min
.. max
):
public static double rescale(double val01, double min, double max) {
return val01 * (max - min) + min;
}
答案 7 :(得分:0)
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值(负零),这个程序不会给出。