Class CMWC4096RNG
- All Implemented Interfaces:
Serializable
,RandomGenerator
,RepeatableRNG
A Java version of George Marsaglia's
Complementary
Multiply With Carry (CMWC) RNG.
This is a very fast PRNG with an extremely long period (2^131104). It should be used
in preference to the MersenneTwisterRNG
when a very long period is required.
One potential drawback of this RNG is that it requires significantly more seed data than the other RNGs provided by Uncommons Maths. It requires just over 16 kilobytes, which may be a problem if your are obtaining seed data from a slow or limited entropy source. In contrast, the Mersenne Twister requires only 128 bits of seed data.
NOTE: Because instances of this class require 16-kilobyte 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.
- Since:
- 1.2
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from interface java.util.random.RandomGenerator
RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final long
private int
private int
private final ReentrantLock
private final byte[]
private static final int
private final int[]
-
Constructor Summary
ConstructorsConstructorDescriptionCreates a new RNG and seeds it using the default seeding strategy.CMWC4096RNG
(byte[] seed) Creates an RNG and seeds it with the specified seed data.CMWC4096RNG
(SeedGenerator seedGenerator) Seed the RNG using the provided seed generation strategy. -
Method Summary
Methods inherited from class java.util.Random
doubles, doubles, doubles, doubles, from, ints, ints, ints, ints, longs, longs, longs, longs, 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
Methods inherited from interface java.util.random.RandomGenerator
isDeprecated, nextDouble, nextDouble, nextExponential, nextFloat, nextFloat, nextGaussian, nextInt, nextLong, nextLong
-
Field Details
-
SEED_SIZE_BYTES
private static final int SEED_SIZE_BYTES- See Also:
-
A
private static final long A- See Also:
-
seed
private final byte[] seed -
state
private final int[] state -
carry
private int carry -
index
private int index -
lock
-
-
Constructor Details
-
CMWC4096RNG
public CMWC4096RNG()Creates a new RNG and seeds it using the default seeding strategy. -
CMWC4096RNG
Seed the RNG using the provided seed generation strategy.- Parameters:
seedGenerator
- The seed generation strategy that will provide the seed value for this RNG.- Throws:
SeedException
- If there is a problem generating a seed.
-
CMWC4096RNG
public CMWC4096RNG(byte[] seed) Creates an RNG and seeds it with the specified seed data.- Parameters:
seed
- The seed data used to initialise the RNG.
-
-
Method Details
-
getSeed
public byte[] getSeed()- Specified by:
getSeed
in interfaceRepeatableRNG
- Returns:
- The seed data used to initialise this pseudo-random number generator.
-
next
protected int next(int bits)
-