2009年8月12日水曜日

java.util.Random

2chのl1j雑談スレでjavaの専門家(笑)が「l1jのランダム値はすごい偏る」的なことを言っていたので
検証してみた。
l1jは独自に乱数ジェネレーターを持ってるわけではなくてjavaクラスライブラリのjava.util.Randomメゾットを使用しているのでそれを使って検証。
検証ソースはこんな感じ 超簡易
Random random = new Random();
for(int i = 0;i <10;i++){
   System.out.println(random.nextInt(100) + 1);
}

1~100の乱数を10回繰り返して表示させ、エクセルに貼り付けてプロットグラフを作ってみた。
これを100回ぐらいやったんだけど画像いっぱいになっちゃうんで3つほど
結論から言うとやっぱすこし偏ってる感はある
グラフはXが試行回数Yが乱数値ね

1回目

乱数値50を基準にみると、50>が8 50<が2
カタヨッテルネー

2回目

今度は逆
50>が2個
50<が8個

3回目

また逆・・
50>が8個
50<が2個
まあ顕著なやつだけピックアップしたからかたよってるぢゃん!ってなるけど
割合が5:5になるのはなかったなあ
かなりかたよるっぽいね
乱数ジェネレータをつくろうかなあー
うまくいったらL1Jに実装してもらいたいけど既にjava.util.Randomいっぱい使ってるから
修正めんどくさそうだ・・

1 コメント:

匿名 さんのコメント...

メルセンヌツイスタをjavaで書いたものが転がってるみたいですよ。

java.util.Randomで2000回試行
1から100までの出現回数です。
15, 17, 19, 23, 14, 10, 22, 17, 21, 22,
19, 27, 20, 19, 18, 22, 21, 30, 24, 17,
19, 25, 17, 19, 20, 19, 23, 22, 17, 24,
22, 22, 17, 17, 23, 26, 18, 17, 27, 27,
18, 19, 23, 24, 20, 16, 25, 19, 23, 19,
16, 26, 35, 21, 26, 18, 20, 18, 21, 12,
22, 11, 27, 19, 22, 17, 24, 15, 20, 12,
20, 19, 19, 17, 18, 24, 16, 22, 15, 18,
16, 21, 18, 18, 22, 25, 16, 16, 14, 18,
23, 13, 17, 21, 30, 19, 10, 21, 23, 25,