回答編集履歴
1
日本語がおかしかったのを修正+説明と解決策追加
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Randomが作る乱数、というかプログラミングで乱数と呼ばれる物は疑似乱数といって実際には乱数ではありません。
|
1
|
+
Randomが作る乱数、というかプログラミングで乱数と呼ばれる物は疑似乱数といってランダムに見える値ではありますが実際には乱数ではありません。
|
2
2
|
|
3
3
|
Randomは乱数を生成するに当たってシード、種になる値を使います。このシードはインスタンス生成時に決めますが、同じシードで作ったインスタンスからは同じ順序で乱数が発生します。
|
4
4
|
|
@@ -6,6 +6,12 @@
|
|
6
6
|
|
7
7
|
今回は引数なしのコンストラクタを使用していますが、この場合現在の時間(厳密ではありませんがそのようなもの)をシードにします。
|
8
8
|
|
9
|
-
ところが、インスタンスの生成間隔があまりにも短いとシードが同じになってしまい
|
9
|
+
ところが、インスタンスの生成間隔があまりにも短いとシードが同じになってしまいます。乱数がすべて同じ値になってしまったのはこれが原因でしょう。
|
10
10
|
|
11
|
-
iと時刻などを使ってシードを作れば回避できるかと思います。
|
11
|
+
iと時刻などを使ってシードを作るか、同じインスタンスから乱数を生成すれば回避できるかと思います。
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
ちなみに学術分野では標準の乱数生成アルゴリズムではランダム性が不十分な場合があり、メルセンヌツイスターといったより質の良い乱数生成アルゴリズムがあったりします。
|
16
|
+
|
17
|
+
他にも単純なビット演算の組み合わせで高速に乱数生成するxorshift法など乱数は意外と奥が深いです。
|