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を使用しています。
乱数生成¶
種類¶
- 擬似乱数生成