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