43 #define VS_RAND_MAX 0x7fffffffUL
47 #define NN_CONSTANT 624
48 static const unsigned int N()
56 static const int MATRIX_A()
60 static const int UPPER_MASK()
64 static const int LOWER_MASK()
72 public:
VSRandom(
unsigned int s ) : mti( N()+1 )
78 mt[0] = s&0xffffffffUL;
79 for (mti = 1; mti < N(); mti++) {
81 (1812433253UL*( mt[mti-1]^(mt[mti-1]>>30) )+mti);
88 mt[mti] &= 0xffffffffUL;
97 VSRandom(
unsigned int init_key[],
unsigned int key_length ) : mti( N()+1 )
103 k = (N() > key_length ? N() : key_length);
105 mt[i] = ( mt[i]^( ( mt[i-1]^(mt[i-1]>>30) )*1664525UL ) )
107 mt[i] &= 0xffffffffUL;
114 if (j >= key_length) j = 0;
116 for (k = N()-1; k; k--) {
117 mt[i] = ( mt[i]^( ( mt[i-1]^(mt[i-1]>>30) )*1566083941UL ) )
119 mt[i] &= 0xffffffffUL;
126 mt[0] = 0x80000000UL;
132 static unsigned int mag01[2] = {0x0UL, MATRIX_A()};
139 for (kk = 0; kk < N()-M(); kk++) {
140 y = ( mt[kk]&UPPER_MASK() )|( mt[kk+1]&LOWER_MASK() );
141 mt[kk] = mt[kk+M()]^(y>>1)^mag01[y&0x1UL];
143 for (; kk < N()-1; kk++) {
144 y = ( mt[kk]&UPPER_MASK() )|( mt[kk+1]&LOWER_MASK() );
145 mt[kk] = mt[kk+( M()-N() )]^(y>>1)^mag01[y&0x1UL];
147 y = ( mt[N()-1]&UPPER_MASK() )|( mt[0]&LOWER_MASK() );
148 mt[N()-1] = mt[M()-1]^(y>>1)^mag01[y&0x1UL];
154 y ^= (y<<7)&0x9d2c5680UL;
155 y ^= (y<<15)&0xefc60000UL;
192 return ( ( (
double)
genrand_int32() )+0.5 )*(1.0/4294967296.0);
199 return (a*67108864.0+
b)*(1.0/9007199254740992.0);