/** * Initialize with default random number generator engine. */ public Random() { real = new UniversalGenerator(); twister = new MersenneTwister(); }
/** * Generate n uniform random numbers in the range [0, 1) * @param d array of random numbers to be generated */ public void nextDoubles(double[] d) { real.nextDoubles(d); }
/** * Returns a random integer. */ public int nextInt() { return twister.nextInt(); }
/** * Initialize Random with a specified integer seed */ public UniversalGenerator(int seed) { setSeed(seed); }
/** * Constructor. */ public MersenneTwister(int seed) { setSeed(seed); }
@Override public int next(int numbits) { if (bitState) { bits64 = nextLong(); bitState = false; return (int) (bits64 >>> (64 - numbits)); } else { bitState = true; return ((int) bits64) >>> (32 - numbits); } }
@Override public void nextDoubles(double[] d) { int n = d.length; for (int i = 0; i < n; i++) { d[i] = nextDouble(); } }
/** * Generator a random number uniformly distributed in [0, 1). * @return a pseudo random number */ public double nextDouble() { return real.nextDouble(); }
@Override public void nextDoubles(double[] d) { int n = d.length; for (int i = 0; i < n; i++) { d[i] = nextDouble(); } }
/** * Constructor. * @param seed */ public MersenneTwister64(long seed) { setSeed(seed); }
@Override public int nextInt() { return next(32); }
@Override public int nextInt() { return rng.nextInt(); }
/** * Initialize with given seed for default random number generator engine. */ public Random(long seed) { real = new UniversalGenerator(seed); twister = new MersenneTwister(seed); }
/** * Returns a random integer in [0, n). */ public int nextInt(int n) { return twister.nextInt(n); }
/** * Initialize Random with default seed. */ public UniversalGenerator() { setSeed(DEFAULT_RANDOM_SEED); }
/** * Constructor. */ public MersenneTwister(long seed) { setSeed(seed); }
/** * Initialize Random with a specified long seed */ public UniversalGenerator(long seed) { setSeed(seed); }
@Override public int next(int numbits) { return nextInt() >>> (32 - numbits); }