読者です 読者をやめる 読者になる 読者になる

線形合同法の危険性

C言語

乱数に触れる機会があったから調べてみた。

C言語の rand 関数で、種をx軸、その種を元に得た乱数の先頭10個をプロット。

なんだこれは・・・。全く一様に分布していないことが一目でわかる。線形合同法ってこんなに危険だったのか。


ちなみに、先頭100個を捨てろという噂のとおり101個目からの10個を取得してプロットするとこうなる。

まだまだ規則性が出てるので、今度は先頭1000個捨てる。

おお・・・?最初よりはだいぶ一様に分布するようになった。まだまだ規則性あるけど。


ということで実験結果。
rand 関数使うときは規則性が出ることを覚悟で使用する。
さらに良質の乱数が欲しい時は線形合同法みたいなクソは使わずに、メルセンヌツイスター使う。