0

最小値と 1 の間の乱数を生成する必要があります -> [min, 1)

私はJavaのランダムクラスを読んでいて、ランダムな倍精度を生成すると、結果は0から1.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;
    }

たとえば、この場合に最小値を .2 とすると、関数の可能な結果は、私が理解しているように、.2 から 1.2 になります。どうすれば簡単に.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)と の差を返しmaxますmin
  • randomNum.nextDouble()~の間の乱数を0返す1
  • + min値を追加して、minそれが最低値になるようにします

  • (max - min) * randomNum.nextDouble()~の間の乱数を0返すmax-min

  • (max - min) * randomNum.nextDouble() + min~の間の乱数をmin返す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 に答える