高速で質もよい疑似乱数生成アルゴリズム xorshift(xor128): ヘキサドライブ日記
http://www.jstatsoft.org/v08/i14/paper
ヘキサドライブのブログの過去ログを見ていたら、擬似乱数生成アルゴリズムに関する記事があり、そこでXorshiftというアルゴリズムを紹介していた。
実装は簡単でXORとシフトだけ。
unsigned long xor128() { static unsigned long x=123456789, y=362436069, z=521288629, w=88675123; unsigned long t=(xˆ(x<<11)); x=y; y=z; z=w; return ( w=(wˆ(w>>19))ˆ(tˆ(t>>8)) ); }
これだけでいいとは驚き。
メルセンヌ・ツイスタなど他にももっといいアルゴリズムはあるけど、ちょっとしたテストに使うならこちらのほうが便利。
論文を見てみたけど、使用条件のようなものは見つからなかった。公開するプログラムの場合で実装して使っても何も記述したりしないでいいのかな。