0

我需要生成一个介于最小值和 1 -> [min, 1) 之间的随机数

我一直在阅读 java 的随机类,发现生成随机双精度时,结果是从 0 到 1.0 的双精度,但是,您不能限制界限。

我最初的想法是将随机函数的最高值限制为 0.7,但这对于随机函数是不可能的。

如果有人可以帮助我,这是我的代码:

public static double random(){
        // generate an random number accuracy within range [min, 1)
        Random randomNum = new Random();
        double accuracy = min + randomNum.nextDouble();
        System.out.println("Min " + min);
        return accuracy;
    }

例如,如果在这种情况下我们将 min 设为 0.2,那么我所理解的函数的可能结果是 0.2 到 1.2。我怎样才能使它简单地 0.2 到 1?

4

3 回答 3

2
 /**
  * A double uniformly distributed in the range [min, max).
  * @param min finite and inclusive.
  * @param max finite, > min, and exclusive.
  * @return d such that min <= d && d < max.
  */
 public static boolean uniformInRange(double min, double max, Random r) {
   assert min < max && !Double.isInfinite(min) && !Double.isInfinite(max);
   return min + (r.nextDouble() * (max - min));
 }

要使用它,只需调用

 uniformInRange(min, 1.0d, randomNum)
于 2012-09-11T21:24:51.870 回答
2

如果我错了,请纠正我,但这不起作用:

public static double random(int min, int max){
    Random randomNum = new Random();
    return (max - min) * randomNum.nextDouble() + min;
}

解释:

  • (max - min)返回 和 之间的maxmin
  • randomNum.nextDouble()0返回一个介于和之间的随机数1
  • + min将添加该min值,因此它是最低值

  • (max - min) * randomNum.nextDouble()0返回一个介于和之间的随机数max-min

  • (max - min) * randomNum.nextDouble() + minmin返回一个介于和之间的随机数max
于 2012-09-11T21:26:22.663 回答
0

这样的事情呢?

double min = .2;
Random gen = new Random();
double rand = (gen.nextDouble() * 0.8) + min;

在这里,您在末尾添加最小界限,并将您的 0-1 比率乘以 0.8,即 0.2 和 1 之间的差。

于 2012-09-11T21:27:45.033 回答