- 疑似乱数2
498 :デフォルトの名無しさん[sage]:2016/10/08(土) 06:01:51.17 ID:KfBpvv2w - 順番性のテストをしたことあるけど、
xorshiftは異常なほど結果が偏ってるよ。 逆に線形合同法は異常なほど分散する。 結局、統計学や確率論などの乱数の順番が重要になる処理では結局どちらも使えない。 例えば、rand(100)で 5回連続で 20以下が出るかどうか。などの処理確率の信憑性が極めて疑わしい。 ちなみにテストはいろいろやったけど、xorshiftのおかしさが一撃でわかるのが x座標y座標と順番に出して印をつけてく方式。 線形合同法に至っては、rand(100) を100個出すだけで十分。確率上あり得ないくらい重複が少なく綺麗に分散する。 線形合同法は、下位ビットのかたよりがすぐ話題になるが、1/max の精度で乱数を必要とすることがあまりないのでけっこうどうでもいい。 ちなみに俺はここ数年、線形合同法で最初のseed設定時に乱数を1024個プールして、 array[rand(max) % 1024]; みたいな感じでランダムで取り出して使う。(そしてそこに次の乱数をセットする)。 って感じの自作汎用dllを使ってる。 トランプだって、2度シャッフルすればもう最初の並び順との因果関係は誰にも発見出来ないってね。 まぁメモリは多少食うし速度も最速じゃないけど、別に最速最小を求めるような研究者じゃないし。俺は。
|
- 疑似乱数2
502 :デフォルトの名無しさん[sage]:2016/10/08(土) 18:34:54.73 ID:KfBpvv2w - あんま深く考えてなかったけどそうかもね。
ただし検定は通ってるから、まあいいっちゃいいけど。 実用上の実質的な周期はそのまま線形合同法と同じだよ。 まあ300回くらいなら多く回しても実用上にも問題ないけど、そんなのは計算しない。 >rand(max) % 1024 これは素数にすることでノーコストで解決できるから気が向いた時にでもやっとくよ。 ただ、どんなに下位ビットが偏ってた所で、 araay[988]の中身 と araay[986]の中身の因果関係、もしくは共通点は何か、と聞かれても判明させるのは不可能に近いと思うけどね。 >上位もマスクして切り捨てて使うのが常識 ただ線形合同法はそれでいいとしてxorshiftは捨てるべきビットが特定できないような? まあ俺はシャッフルして何も捨てないのが好きらしい。 全部が若干遅いんだけどね。特にseed植える時。
|
- Perlについての質問箱 63箱目
463 :デフォルトの名無しさん[sage]:2016/10/08(土) 22:30:15.59 ID:KfBpvv2w - はぁ?
~0 この時点で同じになりませんがな
|