home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / java / util / Random.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  1.7 KB  |  91 lines

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