Class XORShiftRNG

  • All Implemented Interfaces:
    java.io.Serializable, RepeatableRNG

    public class XORShiftRNG
    extends java.util.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:
    Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.util.concurrent.locks.ReentrantLock lock  
      private byte[] seed  
      private static int SEED_SIZE_BYTES  
      private int state1  
      private int state2  
      private int state3  
      private int state4  
      private int state5  
    • Constructor Summary

      Constructors 
      Constructor Description
      XORShiftRNG()
      Creates a new RNG and seeds it using the default seeding strategy.
      XORShiftRNG​(byte[] seed)
      Creates an RNG and seeds it with the specified seed data.
      XORShiftRNG​(SeedGenerator seedGenerator)
      Seed the RNG using the provided seed generation strategy.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      byte[] getSeed()
      protected int next​(int bits)
      • Methods inherited from class java.util.Random

        doubles, doubles, doubles, doubles, 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
    • Field Detail

      • 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 java.util.concurrent.locks.ReentrantLock lock
    • Constructor Detail

      • 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 Detail

      • 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 java.util.Random