
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;
}