hex.rng
Class MersenneTwisterRNG

java.lang.Object
  extended by java.util.Random
      extended by hex.rng.MersenneTwisterRNG
All Implemented Interfaces:
java.io.Serializable

public class MersenneTwisterRNG
extends java.util.Random

Random number generator based on the Mersenne Twister algorithm developed by Makoto Matsumoto and Takuji Nishimura.

This is a very fast random number generator with good statistical properties (it passes the full DIEHARD suite). This is the best RNG for most experiments. If a non-linear generator is required, use the slower AESCounterRNG RNG.

This PRNG is deterministic, which can be advantageous for testing purposes since the output is repeatable. If multiple instances of this class are created with the same seed they will all have identical output.

This code is translated from the original C version and assumes that we will always seed from an array of bytes. I don't pretend to know the meanings of the magic numbers or how it works, it just does.

NOTE: Because instances of this class require 128-bit seeds, it is not possible to seed this RNG using the Random.setSeed(long) method inherited from Random. Calls to this method will have no effect. Instead the seed must be set by a constructor.

See Also:
Serialized Form

Field Summary
static int[] SEEDS
           
 
Constructor Summary
MersenneTwisterRNG(int... seedInts)
          Creates an RNG and seeds it with the specified seed data.
MersenneTwisterRNG(long... seeds)
           
 
Method Summary
protected  int next(int bits)
           
 
Methods inherited from class java.util.Random
nextBoolean, nextBytes, nextDouble, nextFloat, nextGaussian, nextInt, nextInt, nextLong, setSeed
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SEEDS

public static final int[] SEEDS
Constructor Detail

MersenneTwisterRNG

public MersenneTwisterRNG(long... seeds)

MersenneTwisterRNG

public MersenneTwisterRNG(int... seedInts)
Creates an RNG and seeds it with the specified seed data.

Parameters:
seed - The seed data used to initialise the RNG.
Method Detail

next

protected final int next(int bits)
Overrides:
next in class java.util.Random