57 #define MATRIX_A 0x9908b0dfUL // constant vector a
58 #define UPPER_MASK 0x80000000UL // most significant w-r bits
59 #define LOWER_MASK 0x7fffffffUL // least significant r bits
61 static unsigned long mt[
N];
70 mt[0] = s & 0xffffffffUL;
74 ( 1812433253UL * (
mt[
mti - 1] ^ (
mt[
mti - 1] >> 30 ) ) + (
unsigned long)
mti );
79 mt[
mti] &= 0xffffffffUL;
95 k = (
N > key_length ?
N : key_length );
98 mt[i] = (
mt[i] ^ ( (
mt[i - 1] ^ (
mt[i - 1] >> 30 ) ) * 1664525UL ) )
99 + init_key[j] + (
unsigned long) j;
100 mt[i] &= 0xffffffffUL;
104 mt[0] = mt[
N - 1]; i = 1;
106 if ( j >= key_length )
109 for ( k =
N - 1; k; k-- )
111 mt[i] = (
mt[i] ^ ( (
mt[i - 1] ^ (
mt[i - 1] >> 30 ) ) * 1566083941UL ) )
113 mt[i] &= 0xffffffffUL;
117 mt[0] =
mt[
N - 1]; i = 1;
121 mt[0] = 0x80000000UL;
131 static unsigned long mag01[2] = { 0x0UL,
MATRIX_A };
141 for ( kk = 0; kk <
N -
M; kk++ )
144 mt[kk] =
mt[kk +
M] ^ ( y >> 1 ) ^ mag01[y & 0x1UL];
146 for (; kk <
N - 1; kk++ )
149 mt[kk] =
mt[kk + ( M -
N )] ^ ( y >> 1 ) ^ mag01[y & 0x1UL];
152 mt[N - 1] =
mt[M - 1] ^ ( y >> 1 ) ^ mag01[y & 0x1UL];
161 y ^= ( y << 7 ) & 0x9d2c5680UL;
162 y ^= ( y << 15 ) & 0xefc60000UL;
203 return ( ( (
double)
genrand_int32() ) + 0.5 ) * ( 1.0 / 4294967296.0 );
214 return ( (
double) a * 67108864.0 + (
double) b ) * ( 1.0 / 9007199254740992.0 );
void init_genrand(unsigned long s)
double genrand_real2(void)
double genrand_real3(void)
unsigned long genrand_int32(void)
void init_by_array(unsigned long init_key[], int key_length)
double genrand_res53(void)
static unsigned long mt[N]
double genrand_real1(void)