Source code: org/alicebot/server/core/util/MersenneTwisterFast.java
1 // Decompiled by Jad v1.5.8c. Copyright 2001 Pavel Kouznetsov.
2 // Jad home page: http://www.geocities.com/kpdus/jad.html
3 // Decompiler options: packimports(3)
4
5 package org.alicebot.server.core.util;
6
7 import java.io.PrintStream;
8 import java.io.Serializable;
9
10 public class MersenneTwisterFast
11 implements Serializable
12 {
13
14 public MersenneTwisterFast()
15 {
16 setSeed(0L);
17 }
18
19 public MersenneTwisterFast(long l)
20 {
21 setSeed(l);
22 }
23
24 public final void setSeedOld(long l)
25 {
26 haveNextNextGaussian = false;
27 mt = new int[624];
28 mt[0] = (int)l;
29 for(mti = 1; mti < 624; mti++)
30 mt[mti] = 0x10dcd * mt[mti - 1];
31
32 mag01 = new int[2];
33 mag01[0] = 0;
34 mag01[1] = 0x9908b0df;
35 }
36
37 public final void setSeed(int ai[])
38 {
39 mt = new int[624];
40 System.arraycopy(ai, 0, mt, 0, 624);
41 mti = 624;
42 mag01 = new int[2];
43 mag01[0] = 0;
44 mag01[1] = 0x9908b0df;
45 }
46
47 public final void setSeed(long l)
48 {
49 int i = (int)l;
50 haveNextNextGaussian = false;
51 mt = new int[624];
52 for(int j = 0; j < 624; j++)
53 {
54 mt[j] = i & 0xffff0000;
55 i = 0x10dcd * i + 1;
56 mt[j] |= (i & 0xffff0000) >>> 16;
57 i = 0x10dcd * i + 1;
58 }
59
60 mti = 624;
61 mag01 = new int[2];
62 mag01[0] = 0;
63 mag01[1] = 0x9908b0df;
64 }
65
66 public final int nextInt()
67 {
68 if(mti >= 624)
69 {
70 int i1;
71 for(i1 = 0; i1 < 227; i1++)
72 {
73 int i = mt[i1] & 0x80000000 | mt[i1 + 1] & 0x7fffffff;
74 mt[i1] = mt[i1 + 397] ^ i >>> 1 ^ mag01[i & 1];
75 }
76
77 for(; i1 < 623; i1++)
78 {
79 int j = mt[i1] & 0x80000000 | mt[i1 + 1] & 0x7fffffff;
80 mt[i1] = mt[i1 + -227] ^ j >>> 1 ^ mag01[j & 1];
81 }
82
83 int k = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
84 mt[623] = mt[396] ^ k >>> 1 ^ mag01[k & 1];
85 mti = 0;
86 }
87 int l = mt[mti++];
88 l ^= l >>> 11;
89 l ^= l << 7 & 0x9d2c5680;
90 l ^= l << 15 & 0xefc60000;
91 l ^= l >>> 18;
92 return l;
93 }
94
95 public final short nextShort()
96 {
97 if(mti >= 624)
98 {
99 int i1;
100 for(i1 = 0; i1 < 227; i1++)
101 {
102 int i = mt[i1] & 0x80000000 | mt[i1 + 1] & 0x7fffffff;
103 mt[i1] = mt[i1 + 397] ^ i >>> 1 ^ mag01[i & 1];
104 }
105
106 for(; i1 < 623; i1++)
107 {
108 int j = mt[i1] & 0x80000000 | mt[i1 + 1] & 0x7fffffff;
109 mt[i1] = mt[i1 + -227] ^ j >>> 1 ^ mag01[j & 1];
110 }
111
112 int k = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
113 mt[623] = mt[396] ^ k >>> 1 ^ mag01[k & 1];
114 mti = 0;
115 }
116 int l = mt[mti++];
117 l ^= l >>> 11;
118 l ^= l << 7 & 0x9d2c5680;
119 l ^= l << 15 & 0xefc60000;
120 l ^= l >>> 18;
121 return (short)(l >>> 16);
122 }
123
124 public final char nextChar()
125 {
126 if(mti >= 624)
127 {
128 int i1;
129 for(i1 = 0; i1 < 227; i1++)
130 {
131 int i = mt[i1] & 0x80000000 | mt[i1 + 1] & 0x7fffffff;
132 mt[i1] = mt[i1 + 397] ^ i >>> 1 ^ mag01[i & 1];
133 }
134
135 for(; i1 < 623; i1++)
136 {
137 int j = mt[i1] & 0x80000000 | mt[i1 + 1] & 0x7fffffff;
138 mt[i1] = mt[i1 + -227] ^ j >>> 1 ^ mag01[j & 1];
139 }
140
141 int k = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
142 mt[623] = mt[396] ^ k >>> 1 ^ mag01[k & 1];
143 mti = 0;
144 }
145 int l = mt[mti++];
146 l ^= l >>> 11;
147 l ^= l << 7 & 0x9d2c5680;
148 l ^= l << 15 & 0xefc60000;
149 l ^= l >>> 18;
150 return (char)(l >>> 16);
151 }
152
153 public final boolean nextBoolean()
154 {
155 if(mti >= 624)
156 {
157 int i1;
158 for(i1 = 0; i1 < 227; i1++)
159 {
160 int i = mt[i1] & 0x80000000 | mt[i1 + 1] & 0x7fffffff;
161 mt[i1] = mt[i1 + 397] ^ i >>> 1 ^ mag01[i & 1];
162 }
163
164 for(; i1 < 623; i1++)
165 {
166 int j = mt[i1] & 0x80000000 | mt[i1 + 1] & 0x7fffffff;
167 mt[i1] = mt[i1 + -227] ^ j >>> 1 ^ mag01[j & 1];
168 }
169
170 int k = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
171 mt[623] = mt[396] ^ k >>> 1 ^ mag01[k & 1];
172 mti = 0;
173 }
174 int l = mt[mti++];
175 l ^= l >>> 11;
176 l ^= l << 7 & 0x9d2c5680;
177 l ^= l << 15 & 0xefc60000;
178 l ^= l >>> 18;
179 return l >>> 31 != 0;
180 }
181
182 public final boolean nextBoolean(float f)
183 {
184 if(f < 0.0F || f > 1.0F)
185 throw new IllegalArgumentException("probability must be between 0.0 and 1.0 inclusive.");
186 if(mti >= 624)
187 {
188 int i1;
189 for(i1 = 0; i1 < 227; i1++)
190 {
191 int i = mt[i1] & 0x80000000 | mt[i1 + 1] & 0x7fffffff;
192 mt[i1] = mt[i1 + 397] ^ i >>> 1 ^ mag01[i & 1];
193 }
194
195 for(; i1 < 623; i1++)
196 {
197 int j = mt[i1] & 0x80000000 | mt[i1 + 1] & 0x7fffffff;
198 mt[i1] = mt[i1 + -227] ^ j >>> 1 ^ mag01[j & 1];
199 }
200
201 int k = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
202 mt[623] = mt[396] ^ k >>> 1 ^ mag01[k & 1];
203 mti = 0;
204 }
205 int l = mt[mti++];
206 l ^= l >>> 11;
207 l ^= l << 7 & 0x9d2c5680;
208 l ^= l << 15 & 0xefc60000;
209 l ^= l >>> 18;
210 return (float)(l >>> 8) / 1.677722E+07F < f;
211 }
212
213 public final boolean nextBoolean(double d)
214 {
215 if(d < 0.0D || d > 1.0D)
216 throw new IllegalArgumentException("probability must be between 0.0 and 1.0 inclusive.");
217 if(mti >= 624)
218 {
219 int i2;
220 for(i2 = 0; i2 < 227; i2++)
221 {
222 int i = mt[i2] & 0x80000000 | mt[i2 + 1] & 0x7fffffff;
223 mt[i2] = mt[i2 + 397] ^ i >>> 1 ^ mag01[i & 1];
224 }
225
226 for(; i2 < 623; i2++)
227 {
228 int j = mt[i2] & 0x80000000 | mt[i2 + 1] & 0x7fffffff;
229 mt[i2] = mt[i2 + -227] ^ j >>> 1 ^ mag01[j & 1];
230 }
231
232 int k = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
233 mt[623] = mt[396] ^ k >>> 1 ^ mag01[k & 1];
234 mti = 0;
235 }
236 int l = mt[mti++];
237 l ^= l >>> 11;
238 l ^= l << 7 & 0x9d2c5680;
239 l ^= l << 15 & 0xefc60000;
240 l ^= l >>> 18;
241 if(mti >= 624)
242 {
243 int j2;
244 for(j2 = 0; j2 < 227; j2++)
245 {
246 int i1 = mt[j2] & 0x80000000 | mt[j2 + 1] & 0x7fffffff;
247 mt[j2] = mt[j2 + 397] ^ i1 >>> 1 ^ mag01[i1 & 1];
248 }
249
250 for(; j2 < 623; j2++)
251 {
252 int j1 = mt[j2] & 0x80000000 | mt[j2 + 1] & 0x7fffffff;
253 mt[j2] = mt[j2 + -227] ^ j1 >>> 1 ^ mag01[j1 & 1];
254 }
255
256 int k1 = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
257 mt[623] = mt[396] ^ k1 >>> 1 ^ mag01[k1 & 1];
258 mti = 0;
259 }
260 int l1 = mt[mti++];
261 l1 ^= l1 >>> 11;
262 l1 ^= l1 << 7 & 0x9d2c5680;
263 l1 ^= l1 << 15 & 0xefc60000;
264 l1 ^= l1 >>> 18;
265 return (double)(((long)(l >>> 6) << 27) + (long)(l1 >>> 5)) / 9007199254740992D < d;
266 }
267
268 public final byte nextByte()
269 {
270 if(mti >= 624)
271 {
272 int i1;
273 for(i1 = 0; i1 < 227; i1++)
274 {
275 int i = mt[i1] & 0x80000000 | mt[i1 + 1] & 0x7fffffff;
276 mt[i1] = mt[i1 + 397] ^ i >>> 1 ^ mag01[i & 1];
277 }
278
279 for(; i1 < 623; i1++)
280 {
281 int j = mt[i1] & 0x80000000 | mt[i1 + 1] & 0x7fffffff;
282 mt[i1] = mt[i1 + -227] ^ j >>> 1 ^ mag01[j & 1];
283 }
284
285 int k = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
286 mt[623] = mt[396] ^ k >>> 1 ^ mag01[k & 1];
287 mti = 0;
288 }
289 int l = mt[mti++];
290 l ^= l >>> 11;
291 l ^= l << 7 & 0x9d2c5680;
292 l ^= l << 15 & 0xefc60000;
293 l ^= l >>> 18;
294 return (byte)(l >>> 24);
295 }
296
297 public final void nextBytes(byte abyte0[])
298 {
299 for(int i1 = 0; i1 < abyte0.length; i1++)
300 {
301 if(mti >= 624)
302 {
303 int j1;
304 for(j1 = 0; j1 < 227; j1++)
305 {
306 int i = mt[j1] & 0x80000000 | mt[j1 + 1] & 0x7fffffff;
307 mt[j1] = mt[j1 + 397] ^ i >>> 1 ^ mag01[i & 1];
308 }
309
310 for(; j1 < 623; j1++)
311 {
312 int j = mt[j1] & 0x80000000 | mt[j1 + 1] & 0x7fffffff;
313 mt[j1] = mt[j1 + -227] ^ j >>> 1 ^ mag01[j & 1];
314 }
315
316 int k = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
317 mt[623] = mt[396] ^ k >>> 1 ^ mag01[k & 1];
318 mti = 0;
319 }
320 int l = mt[mti++];
321 l ^= l >>> 11;
322 l ^= l << 7 & 0x9d2c5680;
323 l ^= l << 15 & 0xefc60000;
324 l ^= l >>> 18;
325 abyte0[i1] = (byte)(l >>> 24);
326 }
327
328 }
329
330 public final long nextLong()
331 {
332 if(mti >= 624)
333 {
334 int i2;
335 for(i2 = 0; i2 < 227; i2++)
336 {
337 int i = mt[i2] & 0x80000000 | mt[i2 + 1] & 0x7fffffff;
338 mt[i2] = mt[i2 + 397] ^ i >>> 1 ^ mag01[i & 1];
339 }
340
341 for(; i2 < 623; i2++)
342 {
343 int j = mt[i2] & 0x80000000 | mt[i2 + 1] & 0x7fffffff;
344 mt[i2] = mt[i2 + -227] ^ j >>> 1 ^ mag01[j & 1];
345 }
346
347 int k = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
348 mt[623] = mt[396] ^ k >>> 1 ^ mag01[k & 1];
349 mti = 0;
350 }
351 int l = mt[mti++];
352 l ^= l >>> 11;
353 l ^= l << 7 & 0x9d2c5680;
354 l ^= l << 15 & 0xefc60000;
355 l ^= l >>> 18;
356 if(mti >= 624)
357 {
358 int j2;
359 for(j2 = 0; j2 < 227; j2++)
360 {
361 int i1 = mt[j2] & 0x80000000 | mt[j2 + 1] & 0x7fffffff;
362 mt[j2] = mt[j2 + 397] ^ i1 >>> 1 ^ mag01[i1 & 1];
363 }
364
365 for(; j2 < 623; j2++)
366 {
367 int j1 = mt[j2] & 0x80000000 | mt[j2 + 1] & 0x7fffffff;
368 mt[j2] = mt[j2 + -227] ^ j1 >>> 1 ^ mag01[j1 & 1];
369 }
370
371 int k1 = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
372 mt[623] = mt[396] ^ k1 >>> 1 ^ mag01[k1 & 1];
373 mti = 0;
374 }
375 int l1 = mt[mti++];
376 l1 ^= l1 >>> 11;
377 l1 ^= l1 << 7 & 0x9d2c5680;
378 l1 ^= l1 << 15 & 0xefc60000;
379 l1 ^= l1 >>> 18;
380 return ((long)l << 32) + (long)l1;
381 }
382
383 public final double nextDouble()
384 {
385 if(mti >= 624)
386 {
387 int i2;
388 for(i2 = 0; i2 < 227; i2++)
389 {
390 int i = mt[i2] & 0x80000000 | mt[i2 + 1] & 0x7fffffff;
391 mt[i2] = mt[i2 + 397] ^ i >>> 1 ^ mag01[i & 1];
392 }
393
394 for(; i2 < 623; i2++)
395 {
396 int j = mt[i2] & 0x80000000 | mt[i2 + 1] & 0x7fffffff;
397 mt[i2] = mt[i2 + -227] ^ j >>> 1 ^ mag01[j & 1];
398 }
399
400 int k = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
401 mt[623] = mt[396] ^ k >>> 1 ^ mag01[k & 1];
402 mti = 0;
403 }
404 int l = mt[mti++];
405 l ^= l >>> 11;
406 l ^= l << 7 & 0x9d2c5680;
407 l ^= l << 15 & 0xefc60000;
408 l ^= l >>> 18;
409 if(mti >= 624)
410 {
411 int j2;
412 for(j2 = 0; j2 < 227; j2++)
413 {
414 int i1 = mt[j2] & 0x80000000 | mt[j2 + 1] & 0x7fffffff;
415 mt[j2] = mt[j2 + 397] ^ i1 >>> 1 ^ mag01[i1 & 1];
416 }
417
418 for(; j2 < 623; j2++)
419 {
420 int j1 = mt[j2] & 0x80000000 | mt[j2 + 1] & 0x7fffffff;
421 mt[j2] = mt[j2 + -227] ^ j1 >>> 1 ^ mag01[j1 & 1];
422 }
423
424 int k1 = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
425 mt[623] = mt[396] ^ k1 >>> 1 ^ mag01[k1 & 1];
426 mti = 0;
427 }
428 int l1 = mt[mti++];
429 l1 ^= l1 >>> 11;
430 l1 ^= l1 << 7 & 0x9d2c5680;
431 l1 ^= l1 << 15 & 0xefc60000;
432 l1 ^= l1 >>> 18;
433 return (double)(((long)(l >>> 6) << 27) + (long)(l1 >>> 5)) / 9007199254740992D;
434 }
435
436 public final double nextGaussian()
437 {
438 if(haveNextNextGaussian)
439 {
440 haveNextNextGaussian = false;
441 return nextNextGaussian;
442 }
443 double d;
444 double d1;
445 double d2;
446 do
447 {
448 if(mti >= 624)
449 {
450 int i4;
451 for(i4 = 0; i4 < 227; i4++)
452 {
453 int i = mt[i4] & 0x80000000 | mt[i4 + 1] & 0x7fffffff;
454 mt[i4] = mt[i4 + 397] ^ i >>> 1 ^ mag01[i & 1];
455 }
456
457 for(; i4 < 623; i4++)
458 {
459 int j = mt[i4] & 0x80000000 | mt[i4 + 1] & 0x7fffffff;
460 mt[i4] = mt[i4 + -227] ^ j >>> 1 ^ mag01[j & 1];
461 }
462
463 int k = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
464 mt[623] = mt[396] ^ k >>> 1 ^ mag01[k & 1];
465 mti = 0;
466 }
467 int l = mt[mti++];
468 l ^= l >>> 11;
469 l ^= l << 7 & 0x9d2c5680;
470 l ^= l << 15 & 0xefc60000;
471 l ^= l >>> 18;
472 if(mti >= 624)
473 {
474 int j4;
475 for(j4 = 0; j4 < 227; j4++)
476 {
477 int i1 = mt[j4] & 0x80000000 | mt[j4 + 1] & 0x7fffffff;
478 mt[j4] = mt[j4 + 397] ^ i1 >>> 1 ^ mag01[i1 & 1];
479 }
480
481 for(; j4 < 623; j4++)
482 {
483 int j1 = mt[j4] & 0x80000000 | mt[j4 + 1] & 0x7fffffff;
484 mt[j4] = mt[j4 + -227] ^ j1 >>> 1 ^ mag01[j1 & 1];
485 }
486
487 int k1 = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
488 mt[623] = mt[396] ^ k1 >>> 1 ^ mag01[k1 & 1];
489 mti = 0;
490 }
491 int l1 = mt[mti++];
492 l1 ^= l1 >>> 11;
493 l1 ^= l1 << 7 & 0x9d2c5680;
494 l1 ^= l1 << 15 & 0xefc60000;
495 l1 ^= l1 >>> 18;
496 if(mti >= 624)
497 {
498 int k4;
499 for(k4 = 0; k4 < 227; k4++)
500 {
501 int i2 = mt[k4] & 0x80000000 | mt[k4 + 1] & 0x7fffffff;
502 mt[k4] = mt[k4 + 397] ^ i2 >>> 1 ^ mag01[i2 & 1];
503 }
504
505 for(; k4 < 623; k4++)
506 {
507 int j2 = mt[k4] & 0x80000000 | mt[k4 + 1] & 0x7fffffff;
508 mt[k4] = mt[k4 + -227] ^ j2 >>> 1 ^ mag01[j2 & 1];
509 }
510
511 int k2 = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
512 mt[623] = mt[396] ^ k2 >>> 1 ^ mag01[k2 & 1];
513 mti = 0;
514 }
515 int l2 = mt[mti++];
516 l2 ^= l2 >>> 11;
517 l2 ^= l2 << 7 & 0x9d2c5680;
518 l2 ^= l2 << 15 & 0xefc60000;
519 l2 ^= l2 >>> 18;
520 if(mti >= 624)
521 {
522 int l4;
523 for(l4 = 0; l4 < 227; l4++)
524 {
525 int i3 = mt[l4] & 0x80000000 | mt[l4 + 1] & 0x7fffffff;
526 mt[l4] = mt[l4 + 397] ^ i3 >>> 1 ^ mag01[i3 & 1];
527 }
528
529 for(; l4 < 623; l4++)
530 {
531 int j3 = mt[l4] & 0x80000000 | mt[l4 + 1] & 0x7fffffff;
532 mt[l4] = mt[l4 + -227] ^ j3 >>> 1 ^ mag01[j3 & 1];
533 }
534
535 int k3 = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
536 mt[623] = mt[396] ^ k3 >>> 1 ^ mag01[k3 & 1];
537 mti = 0;
538 }
539 int l3 = mt[mti++];
540 l3 ^= l3 >>> 11;
541 l3 ^= l3 << 7 & 0x9d2c5680;
542 l3 ^= l3 << 15 & 0xefc60000;
543 l3 ^= l3 >>> 18;
544 d = 2D * ((double)(((long)(l >>> 6) << 27) + (long)(l1 >>> 5)) / 9007199254740992D) - 1.0D;
545 d1 = 2D * ((double)(((long)(l2 >>> 6) << 27) + (long)(l3 >>> 5)) / 9007199254740992D) - 1.0D;
546 d2 = d * d + d1 * d1;
547 } while(d2 >= 1.0D || d2 == 0.0D);
548 double d3 = Math.sqrt((-2D * Math.log(d2)) / d2);
549 nextNextGaussian = d1 * d3;
550 haveNextNextGaussian = true;
551 return d * d3;
552 }
553
554 public final float nextFloat()
555 {
556 if(mti >= 624)
557 {
558 int i1;
559 for(i1 = 0; i1 < 227; i1++)
560 {
561 int i = mt[i1] & 0x80000000 | mt[i1 + 1] & 0x7fffffff;
562 mt[i1] = mt[i1 + 397] ^ i >>> 1 ^ mag01[i & 1];
563 }
564
565 for(; i1 < 623; i1++)
566 {
567 int j = mt[i1] & 0x80000000 | mt[i1 + 1] & 0x7fffffff;
568 mt[i1] = mt[i1 + -227] ^ j >>> 1 ^ mag01[j & 1];
569 }
570
571 int k = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
572 mt[623] = mt[396] ^ k >>> 1 ^ mag01[k & 1];
573 mti = 0;
574 }
575 int l = mt[mti++];
576 l ^= l >>> 11;
577 l ^= l << 7 & 0x9d2c5680;
578 l ^= l << 15 & 0xefc60000;
579 l ^= l >>> 18;
580 return (float)(l >>> 8) / 1.677722E+07F;
581 }
582
583 public final int nextInt(int i)
584 {
585 if(i <= 0)
586 throw new IllegalArgumentException("n must be positive");
587 if((i & -i) == i)
588 {
589 if(mti >= 624)
590 {
591 int k1;
592 for(k1 = 0; k1 < 227; k1++)
593 {
594 int j = mt[k1] & 0x80000000 | mt[k1 + 1] & 0x7fffffff;
595 mt[k1] = mt[k1 + 397] ^ j >>> 1 ^ mag01[j & 1];
596 }
597
598 for(; k1 < 623; k1++)
599 {
600 int k = mt[k1] & 0x80000000 | mt[k1 + 1] & 0x7fffffff;
601 mt[k1] = mt[k1 + -227] ^ k >>> 1 ^ mag01[k & 1];
602 }
603
604 int l = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
605 mt[623] = mt[396] ^ l >>> 1 ^ mag01[l & 1];
606 mti = 0;
607 }
608 int i1 = mt[mti++];
609 i1 ^= i1 >>> 11;
610 i1 ^= i1 << 7 & 0x9d2c5680;
611 i1 ^= i1 << 15 & 0xefc60000;
612 i1 ^= i1 >>> 18;
613 return (int)((long)i * (long)(i1 >>> 1) >> 31);
614 }
615 int j1;
616 int l1;
617 do
618 {
619 if(mti >= 624)
620 {
621 int i3;
622 for(i3 = 0; i3 < 227; i3++)
623 {
624 int i2 = mt[i3] & 0x80000000 | mt[i3 + 1] & 0x7fffffff;
625 mt[i3] = mt[i3 + 397] ^ i2 >>> 1 ^ mag01[i2 & 1];
626 }
627
628 for(; i3 < 623; i3++)
629 {
630 int j2 = mt[i3] & 0x80000000 | mt[i3 + 1] & 0x7fffffff;
631 mt[i3] = mt[i3 + -227] ^ j2 >>> 1 ^ mag01[j2 & 1];
632 }
633
634 int k2 = mt[623] & 0x80000000 | mt[0] & 0x7fffffff;
635 mt[623] = mt[396] ^ k2 >>> 1 ^ mag01[k2 & 1];
636 mti = 0;
637 }
638 int l2 = mt[mti++];
639 l2 ^= l2 >>> 11;
640 l2 ^= l2 << 7 & 0x9d2c5680;
641 l2 ^= l2 << 15 & 0xefc60000;
642 l2 ^= l2 >>> 18;
643 j1 = l2 >>> 1;
644 l1 = j1 % i;
645 } while((j1 - l1) + (i - 1) < 0);
646 return l1;
647 }
648
649 public static void main(String args[])
650 {
651 MersenneTwisterFast mersennetwisterfast = new MersenneTwisterFast(System.currentTimeMillis());
652 for(int i = 0; i < 0x186a0; i++)
653 System.out.println(mersennetwisterfast.nextInt(5) + 1);
654
655 }
656
657 private static final int N = 624;
658 private static final int M = 397;
659 private static final int MATRIX_A = 0x9908b0df;
660 private static final int UPPER_MASK = 0x80000000;
661 private static final int LOWER_MASK = 0x7fffffff;
662 private static final int TEMPERING_MASK_B = 0x9d2c5680;
663 private static final int TEMPERING_MASK_C = 0xefc60000;
664 private int mt[];
665 private int mti;
666 private int mag01[];
667 private static final long GOOD_SEED = 0L;
668 private double nextNextGaussian;
669 private boolean haveNextNextGaussian;
670 }