Xorshift RNGs

http://lucille.atso-net.jp/blog/archives/2005/01/xorshift_rngs.html
に、「xor とシフトを使うだけの超高速な擬似乱数生成器「Xorshift RNGs」を見つけた。


unsigned long xor128(){
static unsigned long x=123456789,y=362436069,z=521288629,w=88675123;
unsigned long t;
t=(x^(x<<11));x=y;y=z;z=w; return( w=(w^(w>>19))^(t^(t>>8)) );
}



//then the multiply-with-carry (MWC):
unsigned long mwc(){
static unsigned long x=123456789,y=362436069,z=77465321,c=13579;
5
unsigned long long t;
t=916905990LL*x+c; x=y; y=z; c=(t>>32); return z=(t&0xffffffff);
}

前回の乱数備忘録(http://d.hatena.ne.jp/studiokingyo/20041225)の事があったので目にとまった。
と、言う事で、WELL1024a.exeのソースとxor128()を使ってXorshift RNGs乱数生成ソフトを作り、自己満足にアップしたので、時間がありましたら、遊んでみては?
http://www33.tok2.com/home/dca/dkutil.html