Java Random Random in interval [-1000,1000]

时间:2012-01-09 16:17:26

标签: java random

在java中我有:

Random random = new Random();
double randomNum = random.nextDouble();

创建一个介于0和1之间的随机数。但是我想要一个介于-1000和1000之间的数字,我该如何缩放呢?

由于

8 个答案:

答案 0 :(得分:5)

2种可能性:

  1. [密度较小]:将结果乘以2000,然后减去1000 从结果。它不会像可能性那样“密集”。
  2. 在范围[-1000,999]中获取随机int,并添加一个随机双精度 范围[0,1]。
  3. 请注意,可能性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)

试试这个算法:

  1. 生成0到1范围内的随机值。
  2. 将该值乘以2000(所需范围的大小)。
  3. 从步骤2的结果中减去1000(将值移动到所需范围内)。

答案 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值(负零),这个程序不会给出。