擬似乱数

昨日は擬似乱数で失敗したという話をした。
0〜7をランダムに発生させるのに、
cstdlibのrand()を使って、


rand()&7


と下の3ビットを使ったら、
ぱっと見はそんなに問題ないけど、
やっぱり多少ホントのランダムよりばらついちゃうんだね、
確率が大きくなったところをみると。
倍まではなってなかったけど。


(rand()&(7*1024))>>10


と上の方を使ったらまあまあの結果が出た。


cstdlibの擬似乱数の発生方法はどういうアルゴリズムか知らないが、
安易に使うと怖い目にあうね。