home *** CD-ROM | disk | FTP | other *** search
- package java.util;
-
- import java.io.Serializable;
-
- public class Random implements Serializable {
- private long seed;
- private static final long multiplier = 25214903917L;
- private static final long addend = 11L;
- private static final long mask = (1L << 48) - 1L;
- private static final int BITS_PER_BYTE = 8;
- private static final int BYTES_PER_INT = 4;
- private double nextNextGaussian;
- private boolean haveNextNextGaussian;
-
- public Random() {
- this(System.currentTimeMillis());
- }
-
- public Random(long var1) {
- this.haveNextNextGaussian = false;
- this.setSeed(var1);
- }
-
- public synchronized void setSeed(long var1) {
- this.seed = (var1 ^ 25214903917L) & (1L << 48) - 1L;
- this.haveNextNextGaussian = false;
- }
-
- protected synchronized int next(int var1) {
- long var2 = this.seed * 25214903917L + 11L & (1L << 48) - 1L;
- this.seed = var2;
- return (int)(var2 >>> 48 - var1);
- }
-
- public void nextBytes(byte[] var1) {
- int var2 = var1.length;
- int var3 = 0;
- int var4 = 0;
-
- while(true) {
- for(int var5 = 0; var5 < 4; ++var5) {
- if (var3 == var2) {
- return;
- }
-
- var4 = var5 == 0 ? this.next(32) : var4 >> 8;
- var1[var3++] = (byte)var4;
- }
- }
- }
-
- public int nextInt() {
- return this.next(32);
- }
-
- public long nextLong() {
- return ((long)this.next(32) << 32) + (long)this.next(32);
- }
-
- public float nextFloat() {
- int var1 = this.next(24);
- return (float)var1 / 1.6777216E7F;
- }
-
- public double nextDouble() {
- long var1 = ((long)this.next(26) << 27) + (long)this.next(27);
- return (double)var1 / (double)(1L << 53);
- }
-
- public synchronized double nextGaussian() {
- if (this.haveNextNextGaussian) {
- this.haveNextNextGaussian = false;
- return this.nextNextGaussian;
- } else {
- double var1;
- double var3;
- double var5;
- do {
- var1 = (double)2.0F * this.nextDouble() - (double)1.0F;
- var3 = (double)2.0F * this.nextDouble() - (double)1.0F;
- var5 = var1 * var1 + var3 * var3;
- } while(var5 >= (double)1.0F);
-
- double var7 = Math.sqrt((double)-2.0F * Math.log(var5) / var5);
- this.nextNextGaussian = var3 * var7;
- this.haveNextNextGaussian = true;
- return var1 * var7;
- }
- }
- }
-