@Override public void nextDoubles(double[] d) { int n = d.length; for (int i = 0; i < n; i++) { d[i] = nextDouble(); } }
/** * Returns a random integer. */ public int nextInt() { return twister.nextInt(); }
public long nextLong() { return twister.nextLong(); }
/** * Initialize with default random number generator engine. */ public Random() { real = new UniversalGenerator(); twister = new MersenneTwister(); }
/** * Constructor. */ public MersenneTwister(int seed) { setSeed(seed); }
@Override public int nextInt(int n) { if (n <= 0) { throw new IllegalArgumentException("n must be positive"); } // n is a power of 2 if ((n & -n) == n) { return (int) ((n * (long) next(31)) >> 31); } int bits, val; do { bits = next(31); val = bits % n; } while (bits - val + (n - 1) < 0); return val; }
/** * Initialize with given seed for default random number generator engine. */ public Random(long seed) { real = new UniversalGenerator(seed); twister = new MersenneTwister(seed); }
@Override public void setSeed(long seed) { setSeed((int) (seed % UniversalGenerator.BIG_PRIME)); }
@Nonnull public static PRNG createPRNG(@Nonnull PRNGType type) { final PRNG rng; switch (type) { case java: rng = new JavaRandom(); break; case secure: rng = new JavaRandom(new SecureRandom()); break; case smile: rng = new SmileRandom(); break; case smileMT: rng = new SmileRandom(new smile.math.random.MersenneTwister()); break; case smileMT64: rng = new SmileRandom(new smile.math.random.MersenneTwister64()); break; case commonsMath3MT: rng = new CommonsMathRandom(new org.apache.commons.math3.random.MersenneTwister()); break; default: throw new IllegalStateException("Unexpected type: " + type); } return rng; }
/** * Returns a random integer in [0, n). */ public int nextInt(int n) { return twister.nextInt(n); }
/** * Constructor. */ public MersenneTwister(long seed) { setSeed(seed); }
@Nonnull public static PRNG createPRNG(@Nonnull PRNGType type, long seed) { final PRNG rng; switch (type) { case java: rng = new JavaRandom(seed); break; case secure: rng = new JavaRandom(new SecureRandom(Primitives.toBytes(seed))); break; case smile: rng = new SmileRandom(seed); break; case smileMT: rng = new SmileRandom( new smile.math.random.MersenneTwister(Primitives.hashCode(seed))); break; case smileMT64: rng = new SmileRandom(new smile.math.random.MersenneTwister64(seed)); break; case commonsMath3MT: rng = new CommonsMathRandom( new org.apache.commons.math3.random.MersenneTwister(seed)); break; default: throw new IllegalStateException("Unexpected type: " + type); } return rng; }
/** * Initialize the random generator with a seed. */ public void setSeed(long seed) { real.setSeed(seed); twister.setSeed(seed); }
@Override public int next(int numbits) { return nextInt() >>> (32 - numbits); }
@Override public double nextDouble() { return (nextInt() >>> 1) / (double) Integer.MAX_VALUE; }