123 #define MATRIX_A 0x9908b0dfUL
124 #define UPPER_MASK 0x80000000UL
125 #define LOWER_MASK 0x7fffffffUL
127 void init_genrand(
unsigned long s);
136 static unsigned long mt[N];
137 static int mti = N + 1;
141 init_genrand(
unsigned long s)
143 mt[0] = s & 0xffffffffUL;
144 for (mti = 1; mti < N; mti++) {
146 (1812433253UL * (mt[mti - 1] ^ (mt[mti - 1] >> 30)) + mti);
151 mt[mti] &= 0xffffffffUL;
161 static unsigned long mag01[2] = { 0x0UL, MATRIX_A };
168 init_genrand(5489UL);
170 for (kk = 0; kk < N - M; kk++) {
171 y = (mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK);
172 mt[kk] = mt[kk + M] ^ (y >> 1) ^ mag01[y & 0x1UL];
174 for (; kk < N - 1; kk++) {
175 y = (mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK);
176 mt[kk] = mt[kk + (M - N)] ^ (y >> 1) ^ mag01[y & 0x1UL];
178 y = (mt[N - 1] & UPPER_MASK) | (mt[0] & LOWER_MASK);
179 mt[N - 1] = mt[M - 1] ^ (y >> 1) ^ mag01[y & 0x1UL];
188 y ^= (y << 7) & 0x9d2c5680UL;
189 y ^= (y << 15) & 0xefc60000UL;
199 return (
long) (genrand_int32() >> 1);
206 return genrand_int32() * (1.0 / 4294967295.0);
214 return genrand_int32() * (1.0 / 4294967296.0);
222 return (((
double) genrand_int32()) + 0.5) * (1.0 / 4294967296.0);
230 unsigned long a = genrand_int32() >> 5, b = genrand_int32() >> 6;
231 return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0);
SPHINXBASE_EXPORT double genrand_res53(void)
generates a random number on [0,1) with 53-bit resolution
SPHINXBASE_EXPORT long genrand_int31(void)
generates a random number on [0,0x7fffffff]-interval
High performance prortable random generator created by Takuji Nishimura and Makoto Matsumoto...
SPHINXBASE_EXPORT double genrand_real3(void)
generates a random number on (0,1)-real-interval
SPHINXBASE_EXPORT void genrand_seed(unsigned long s)
Initialize the seed of the random generator.