home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / util / Random.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  1.6 KB  |  113 lines

  1. package java.util;
  2.  
  3. import java.io.Serializable;
  4.  
  5. public class Random implements Serializable {
  6.    static final long serialVersionUID = 3905348978240129619L;
  7.    private long seed;
  8.    private static final long multiplier = 25214903917L;
  9.    private static final long addend = 11L;
  10.    private static final long mask = 281474976710655L;
  11.    private static final int BITS_PER_BYTE = 8;
  12.    private static final int BYTES_PER_INT = 4;
  13.    private double nextNextGaussian;
  14.    private boolean haveNextNextGaussian;
  15.  
  16.    public Random() {
  17.       this(System.currentTimeMillis());
  18.    }
  19.  
  20.    public Random(long var1) {
  21.       this.haveNextNextGaussian = false;
  22.       this.setSeed(var1);
  23.    }
  24.  
  25.    public synchronized void setSeed(long var1) {
  26.       this.seed = (var1 ^ 25214903917L) & 281474976710655L;
  27.       this.haveNextNextGaussian = false;
  28.    }
  29.  
  30.    protected synchronized int next(int var1) {
  31.       long var2 = this.seed * 25214903917L + 11L & 281474976710655L;
  32.       this.seed = var2;
  33.       return (int)(var2 >>> 48 - var1);
  34.    }
  35.  
  36.    public void nextBytes(byte[] var1) {
  37.       int var2 = var1.length;
  38.       int var3 = 0;
  39.       int var4 = 0;
  40.  
  41.       while(true) {
  42.          for(int var5 = 0; var5 < 4; ++var5) {
  43.             if (var3 == var2) {
  44.                return;
  45.             }
  46.  
  47.             var4 = var5 == 0 ? this.next(32) : var4 >> 8;
  48.             var1[var3++] = (byte)var4;
  49.          }
  50.       }
  51.    }
  52.  
  53.    public int nextInt() {
  54.       return this.next(32);
  55.    }
  56.  
  57.    public int nextInt(int var1) {
  58.       if (var1 <= 0) {
  59.          throw new IllegalArgumentException("n must be positive");
  60.       } else if ((var1 & -var1) == var1) {
  61.          return (int)((long)var1 * (long)this.next(31) >> 31);
  62.       } else {
  63.          int var2;
  64.          int var3;
  65.          do {
  66.             var2 = this.next(31);
  67.             var3 = var2 % var1;
  68.          } while(var2 - var3 + (var1 - 1) < 0);
  69.  
  70.          return var3;
  71.       }
  72.    }
  73.  
  74.    public long nextLong() {
  75.       return ((long)this.next(32) << 32) + (long)this.next(32);
  76.    }
  77.  
  78.    public boolean nextBoolean() {
  79.       return this.next(1) != 0;
  80.    }
  81.  
  82.    public float nextFloat() {
  83.       int var1 = this.next(24);
  84.       return (float)var1 / 1.6777216E7F;
  85.    }
  86.  
  87.    public double nextDouble() {
  88.       long var1 = ((long)this.next(26) << 27) + (long)this.next(27);
  89.       return (double)var1 / (double)9.007199E15F;
  90.    }
  91.  
  92.    public synchronized double nextGaussian() {
  93.       if (this.haveNextNextGaussian) {
  94.          this.haveNextNextGaussian = false;
  95.          return this.nextNextGaussian;
  96.       } else {
  97.          double var1;
  98.          double var3;
  99.          double var5;
  100.          do {
  101.             var1 = (double)2.0F * this.nextDouble() - (double)1.0F;
  102.             var3 = (double)2.0F * this.nextDouble() - (double)1.0F;
  103.             var5 = var1 * var1 + var3 * var3;
  104.          } while(var5 >= (double)1.0F || var5 == (double)0.0F);
  105.  
  106.          double var7 = Math.sqrt((double)-2.0F * Math.log(var5) / var5);
  107.          this.nextNextGaussian = var3 * var7;
  108.          this.haveNextNextGaussian = true;
  109.          return var1 * var7;
  110.       }
  111.    }
  112. }
  113.