13 #define MATRIX_A 0x9908b0dfUL
14 #define UPPER_MASK 0x80000000UL
15 #define LOWER_MASK 0x7fffffffUL
17 static unsigned long mt[
N];
22 t->
mt[0]= s & 0xffffffffUL;
25 (1812433253UL * (t->
mt[t->
mti-1] ^ (t->
mt[t->
mti-1] >> 30)) + t->
mti);
26 t->
mt[t->
mti] &= 0xffffffffUL;
33 static unsigned long mag01[2]={0x0UL,
MATRIX_A};
42 for (kk=0;kk<
N-
M;kk++) {
44 t->
mt[kk] = t->
mt[kk+
M] ^ (y >> 1) ^ mag01[y & 0x1UL];
48 t->
mt[kk] = t->
mt[kk+(M-
N)] ^ (y >> 1) ^ mag01[y & 0x1UL];
51 t->
mt[N-1] = t->
mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1UL];
60 y ^= (y << 7) & 0x9d2c5680UL;
61 y ^= (y << 15) & 0xefc60000UL;
80 mt[0]= s & 0xffffffffUL;
81 for (mti=1; mti<
N; mti++) {
83 (1812433253UL * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti);
88 mt[mti] &= 0xffffffffUL;
102 k = (
N>key_length ?
N : key_length);
104 mt[
i] = (mt[
i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525UL))
106 mt[
i] &= 0xffffffffUL;
108 if (i>=
N) { mt[0] = mt[
N-1]; i=1; }
109 if (j>=key_length) j=0;
111 for (k=
N-1; k; k--) {
112 mt[
i] = (mt[
i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941UL))
114 mt[
i] &= 0xffffffffUL;
116 if (i>=
N) { mt[0] = mt[
N-1]; i=1; }
119 mt[0] = 0x80000000UL;
126 static unsigned long mag01[2]={0x0UL,
MATRIX_A};
135 for (kk=0;kk<
N-
M;kk++) {
137 mt[kk] = mt[kk+
M] ^ (y >> 1) ^ mag01[y & 0x1UL];
141 mt[kk] = mt[kk+(M-
N)] ^ (y >> 1) ^ mag01[y & 0x1UL];
144 mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1UL];
153 y ^= (y << 7) & 0x9d2c5680UL;
154 y ^= (y << 15) & 0xefc60000UL;
191 return(a*67108864.0+
b)*(1.0/9007199254740992.0);