5 unsigned stat[4], mat1, mat2, tmat;
8 // tinyMTの32bit版のアルゴリズムを使っています : http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/TINYMT/index-jp.html
12 x = (randStat.stat[0] & 0x7fffffff) ^ randStat.stat[1] ^ randStat.stat[2];
16 randStat.stat[1] = randStat.stat[2] ^ (-((int)(y & 1)) & randStat.mat1);
17 randStat.stat[2] = x ^ (y << 10) ^ (-((int)(y & 1)) & randStat.mat2);
22 void randStatInit(unsigned seed)
25 randStat.stat[0] = seed;
26 randStat.stat[1] = randStat.mat1 = 0x8f7011ee;
27 randStat.stat[2] = randStat.mat2 = 0xfc78ff1f;
28 randStat.stat[3] = randStat.tmat = 0x3793fdff;
29 for (i = 1; i < 8; i++){
30 randStat.stat[i & 3] ^= i + ((unsigned)1812433253) * (randStat.stat[(i - 1) & 3] ^ (randStat.stat[(i - 1) & 3] >> 30));
32 for (i = 0; i < 8; i++){
38 unsigned int randGetNextUInt32(void)
44 u32t = randStat.stat[0] + (randStat.stat[2] >> 8);
45 return (randStat.stat[3] ^ u32t ^ (-((int)(u32t & 1)) & randStat.tmat));