Class PcgRRLocked

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

    public class PcgRRLocked
    extends RandomBaseLocked
    A 64 bit State PcgRNG with 32 bit output. PCG-XSH-RR

    The pcg family combines a linear congruential generators with a permutation output function resulting in high quality pseudo random numbers.

    The original concept was introduced by Melissa O’Neill please refer to pcg-random for more information.

    The RR instance permutates the output using the following function:

     
     int shift = (int) (((state >>> 18) ^ state) >>> 27);
     int rotation = (int) (state >>> 59);
     return Integer.rotateRight(shift, rotation);
     
     
    Regarding the RR Instance: "[...The] design goal is to be a good all-purpose random number generator. The intent is to balance speed with statistical performance and reasonable security, charting a middle-of-the-road path. (It’s the generator that I recommend for most users.) The strategy is to perform an xorshift to improve the high bits, then randomly rotate them so that all bits are full period. Hence the mnemonic PCG-XSH-RR, “xorshift high (bits), random rotation”." This implementation is thread safe utilizing read write locks. During non contested periods this version performs considerably slower and only gains the upper hand if the synchronized parts are hammered consistently.
    Author:
    Kilian
    See Also:
    www.pcg-random.org, PcgRRLocked, Serialized Form
    • Constructor Detail

      • PcgRRLocked

        public PcgRRLocked()
        Create a synchronized PcgRR instance seeded with with 2 longs generated by xorshift*. The values chosen are very likely not used as seeds in any other non argument constructor of any of the classes provided in this library.
      • PcgRRLocked

        public PcgRRLocked​(long seed,
                           long streamNumber)
        Create a random number generator with the given seed and stream number. The seed defines the current state in which the rng is in and corresponds to seeds usually found in other RNG implementations. RNGs with different seeds are able to catch up after they exhaust their period and produce the same numbers.

        Different stream numbers alter the increment of the rng and ensure distinct state sequences

        Only generators with the same seed AND stream numbers will produce identical values

        Parameters:
        seed - used to compute the starting state of the RNG
        streamNumber - used to compute the increment for the lcg.
      • PcgRRLocked

        @Deprecated
        public PcgRRLocked​(long seed,
                           long streamNumber,
                           boolean dummy)
        Deprecated.
    • Method Detail

      • getInt

        protected int getInt​(long state)
        Description copied from class: RandomBase64
        Construct a 32bit int from the given 64bit state using a permutation function. The produced int will be used to construct all other datatypes returned by this RNG.
        Specified by:
        getInt in class RandomBase64
        Parameters:
        state - random int as produced by the internal lcg
        Returns:
        a random int with randomly set bits