Java で 0 から 1 までのランダムな double 値を生成する

Rupam Yadav 2023年10月12日
  1. Java で Math.random() を使用して 0 から 1 までのランダムな double 値を生成する
  2. 0 から 1 まで Java で Random().nextDouble() を使用してのランダムな Double 値を生成する
  3. 0 から 1 まで Java で ThreadLocalRandom.current().nextDouble() を使用してのランダムな Double 値を生成する
Java で 0 から 1 までのランダムな double 値を生成する

この記事では、プリミティブ型 double の 0 から 1 までのランダムな値を生成する 3つの方法を紹介します。生成された値のランダム性を証明するために、ループを使用して、0 から 1 までの 10 個のランダムな double 型の値を生成します。

Java で Math.random() を使用して 0 から 1 までのランダムな double 値を生成する

クラス Math は、さまざまな数学演算を実行するために使用できます。このクラスを使用して、乱数を生成することもできます。Math.random() は、0 から 1 までの乱数を返す静的関数です。ここで、0 は生成された値を含み、1 は常に排他的です。

次の例では、Math.random() を使用して、タイプ double のランダム値を生成します。出力では、値がすべてランダムであることがわかります。

public class RandomDouble {
  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
      double randomDbl = Math.random();

      System.out.println(randomDbl);
    }
  }
}

出力:

0.9537872648347154
0.2863804438195172
0.5815339629441948
0.7734677312115609
0.021051510563543485
0.9064133490694901
0.6833468691871607
0.30655711217738246
0.2730784326888416
0.6804778782692341

0 から 1 まで Java で Random().nextDouble() を使用してのランダムな Double 値を生成する

0 から 1 までの乱数を生成できる別のメソッドは、java.util.Random クラスの一部である nextDouble() です。Random クラスのオブジェクトを使用して nextDouble() を呼び出すと、前の例で見たように、0 から 1 までのランダムな値が返されます。

このメソッドは Math.random() よりも効率的であると言われています。

import java.util.Random;

public class RandomDouble {
  public static void main(String[] args) {
    Random randomObj = new Random();

    for (int i = 0; i < 10; i++) {
      double randomDbl = randomObj.nextDouble();

      System.out.println(randomDbl);
    }
  }
}

出力:

0.240017494934622
0.08331956619499614
0.4359524465181911
0.5291811081068774
0.38193057731688373
0.6969527822622924
0.5436002348156281
0.32176862575520415
0.07327708002828293
0.9005635171231344

0 から 1 まで Java で ThreadLocalRandom.current().nextDouble() を使用してのランダムな Double 値を生成する

このチュートリアルで見た 2つの手法は、マルチスレッドシステムでは効率的ではなく、パフォーマンスが低下する可能性があります。これは、Random クラスを使用して乱数を生成すると、すべてのスレッドが同じインスタンスを共有するために発生します。つまり、1つのスレッドで変更が発生すると、他のすべてのスレッドも実行されます。

この問題を解決するために、Java は JDK7 アップデートで ThreadLocalRandom を導入しました。これは現在のスレッドでのみ実行されるクラスであるため、複数のスレッドがある環境でのパフォーマンスが向上します。

以下の例では、ThreadLocalRandom.current() を使用して double ランダム値を生成する nextDouble() を呼び出し、0 から 1 までの double 値をランダムに生成して返します。

import java.util.concurrent.ThreadLocalRandom;

public class RandomDouble {
  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
      double randomDbl = ThreadLocalRandom.current().nextDouble();

      System.out.println(randomDbl);
    }
  }
}

出力:

0.9717084711770174
0.8977374014983726
0.2744375247405819
0.2866498720386894
0.6118970047667582
0.7441044456568308
0.21043457873690274
0.08985457420563114
0.86748682220748
0.18952106607144148
著者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

関連記事 - Java Random