4 int RANDOM_DEFAULT_SEED;
14 RANDOM_DEFAULT_SEED = 0;
19 MATRIX_A = 0x9908b0df; /* constant vector a */
20 UPPER_MASK = 0x80000000; /* most significant w-r bits */
21 LOWER_MASK = 0x7fffffff; /* least significant r bits */
28 public void random_alloc() {
29 init_genrand(this.RANDOM_DEFAULT_SEED);
32 /* initializes mt[N] with a seed */
33 public void init_genrand(int s) {
34 mt[0]= s & 0xFFFFFFFF;
35 for (int mti=1; mti<N; mti++) {
36 mt[mti] = (1812433253 * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti);
37 /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
38 /* In the previous versions, MSBs of the seed affect */
39 /* only MSBs of the array mt[]. */
40 /* 2002/01/09 modified by Makoto Matsumoto */
41 mt[mti] &= 0xFFFFFFFF;
42 /* for >32 bit machines */
47 public void random_seed(int seed) {
51 public int random_generate() {
52 return 0x7fffffff&genrand_int32();
55 public int posrandom_generate() {
56 return 0x7fffffff&genrand_int32();
59 public int genrand_int32() {
63 /* mag01[x] = x * MATRIX_A for x=0,1 */
65 if (mti >= 624) { /* generate N words at one time */
69 if (mti == 624+1) /* if init_genrand() has not been called, */
70 init_genrand(5489); /* a default initial seed is used */
72 for (kk=0;kk<(624-397);kk++) {
73 y = (mt[kk]&0x80000000)|(mt[kk+1]&0x7fffffff);
74 mt[kk] = mt[kk+397] ^ (y >> 1) ^ ((y & 0x1)==0 ? 0:0x9908b0df);
76 for (;kk<(624-1);kk++) {
77 y = (mt[kk]&0x80000000)|(mt[kk+1]&0x7fffffff);
78 mt[kk] = mt[kk+(397-624)] ^ (y >> 1) ^ ((y & 0x1)==0 ? 0:0x9908b0df);
80 y = (mt[624-1]&0x80000000)|(mt[0]&0x7fffffff);
81 mt[624-1] = mt[397-1] ^ (y >> 1) ^ ((y & 0x1)==0 ? 0:0x9908b0df);
90 y ^= (y << 7) & 0x9d2c5680;
91 y ^= (y << 15) & 0xefc60000;