プロジェクト

全般

プロフィール

Javaプログラミング 乱数

Javaの乱数生成

Javaには、標準でいくつかの乱数発生APIが提供されています。

  • java.util.Randomクラス
  • java.math.Mathクラスの乱数生成メソッド
  • java.security.SecureRandomクラス
  • java.util.concurrent.ThreadLocalRandom
  • java.util.random.RandomGenerator

Random

48bitのseedを使い、線形合同法で更新。初期のJavaから提供されていますが、今ではよりよいライブラリが提供されており、互換性のために残されています。
特に、暗号に使用するには安全性が欠けているので、セキュリティ用途に使用するには不適切です。

「Java 7の時点で、Randomをもはや使うべきではありません。今日ではほとんどの場合、選択すべき乱数生成器は ThreadLocalRandom です。それは高品質な乱数を生成し、きわめて速いです。私のマシンではRandomよりも3.6倍速いです。fork-joinプールと並列ストリームでは、SplittableRandomを使ってください。」 [1]

1 Joshua Block.「Effective Java 第3版」,丸善出版, 2018, p.268

RandomGenerator

乱数生成アルゴリズムの選択が可能です。RandomGeneratorFactory.of(アルゴリズム名) で生成します。
アルゴリズムには、L128X1024MixRandom, L128X128MixRandom, ... など多数あります。Randomを指定するとjava.util.Randomと同じアルゴリズムになります。

Math

Math.random

0 以上 1 未満の浮動小数点数(double)の乱数を生成します。
内部では、java.util.Randomを使用しています。

乱数生成

種類

  • 擬似乱数生成


約1ヶ月前に更新