Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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 }