Class XORShiftRNG

java.lang.Object
java.util.Random
org.uncommons.maths.random.XORShiftRNG
All Implemented Interfaces:
Serializable, RandomGenerator, RepeatableRNG

public class XORShiftRNG extends Random implements RepeatableRNG

Very fast pseudo random number generator. See this page for a description. This RNG has a period of about 2^160, which is not as long as the MersenneTwisterRNG but it is faster.

NOTE: Because instances of this class require 160-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.

Since:
1.2
See Also:
  • Field Details

    • SEED_SIZE_BYTES

      private static final int SEED_SIZE_BYTES
      See Also:
    • state1

      private int state1
    • state2

      private int state2
    • state3

      private int state3
    • state4

      private int state4
    • state5

      private int state5
    • seed

      private final byte[] seed
    • lock

      private final ReentrantLock lock
  • Constructor Details

    • XORShiftRNG

      public XORShiftRNG()
      Creates a new RNG and seeds it using the default seeding strategy.
    • XORShiftRNG

      public XORShiftRNG(SeedGenerator seedGenerator) throws SeedException
      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.
    • XORShiftRNG

      public XORShiftRNG(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 interface RepeatableRNG
      Returns:
      The seed data used to initialise this pseudo-random number generator.
    • next

      protected int next(int bits)
      Overrides:
      next in class Random