Class CellularAutomatonRNG

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

public class CellularAutomatonRNG extends Random implements RepeatableRNG

Java port of the cellular automaton pseudorandom number generator developed by Tony Pasqualoni.

NOTE: Instances of this class do not use the seeding mechanism inherited from Random. Calls to the Random.setSeed(long) method will have no effect. Instead the seed must be set by a constructor.

See Also:
  • Field Details

    • SEED_SIZE_BYTES

      private static final int SEED_SIZE_BYTES
      See Also:
    • AUTOMATON_LENGTH

      private static final int AUTOMATON_LENGTH
      See Also:
    • RNG_RULE

      private static final int[] RNG_RULE
    • seed

      private final byte[] seed
    • cells

      private final int[] cells
    • lock

      private final ReentrantLock lock
    • currentCellIndex

      private int currentCellIndex
  • Constructor Details

    • CellularAutomatonRNG

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

      public CellularAutomatonRNG(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.
    • CellularAutomatonRNG

      public CellularAutomatonRNG(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

    • next

      public int next(int bits)
      Overrides:
      next in class Random
    • getSeed

      public byte[] getSeed()
      Specified by:
      getSeed in interface RepeatableRNG
      Returns:
      The seed data used to initialise this pseudo-random number generator.
    • convertCellsToInt

      private static int convertCellsToInt(int[] cells, int offset)