XORSHIFTアルゴリズムによる乱数は、非常にシンプルなコードでメルセンヌ・ツイスターに近い良質な乱数を生成する。
#include <iostream> #include <cmath> using namespace std; unsigned long xor128(void) { 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)) ); } int main(void) { unsigned long sum=0; for (int j=0;j<1000;j++) { for (int i=0;i<100000;i++) { sum+=xor128()%2; } double ave=double(sum)/(j*100000); cout<<ave<<endl; } return 0; }
上記関数xor128()で得られる数値の範囲は、0からULONG_MAXの間の値である。0から1までの乱数を得るには、得た数値/(float)(ULONG_MAX)とするとよい。
最終更新日