ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

擬似乱数生成アルゴリズム Xorshift

高速で質もよい疑似乱数生成アルゴリズム 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&#710;(x<<11));
  x=y; y=z; z=w;
  return ( w=(w&#710;(w>>19))&#710;(t&#710;(t>>8)) );
}

これだけでいいとは驚き。
メルセンヌ・ツイスタなど他にももっといいアルゴリズムはあるけど、ちょっとしたテストに使うならこちらのほうが便利。
論文を見てみたけど、使用条件のようなものは見つからなかった。公開するプログラムの場合で実装して使っても何も記述したりしないでいいのかな。