Class PcgRxsMXs64

  • All Implemented Interfaces:
    RandomLongSource, RestorableUniformRandomProvider, UniformRandomProvider

    public class PcgRxsMXs64
    extends LongProvider
    A Permuted Congruential Generator (PCG) that is composed of a 64-bit Linear Congruential Generator (LCG) combined with the RXS-M-XS (random xorshift; multiply; xorshift) output transformation to create 64-bit output.

    State size is 128 bits and the period is 264.

    Note: Although the seed size is 128 bits, only the first 64 are effective: in effect, two seeds that only differ by the last 64 bits may produce highly correlated sequences.

    Since:
    1.3
    See Also:
    PCG, A Family of Better Random Number Generators
    • Field Detail

      • DEFAULT_INCREMENT

        private static final long DEFAULT_INCREMENT
        The default increment.
        See Also:
        Constant Field Values
      • state

        private long state
        The state of the LCG.
      • increment

        private long increment
        The increment of the LCG.
    • Constructor Detail

      • PcgRxsMXs64

        public PcgRxsMXs64​(java.lang.Long seed)
        Creates a new instance using a default increment.
        Parameters:
        seed - Initial state.
        Since:
        1.4
      • PcgRxsMXs64

        public PcgRxsMXs64​(long[] seed)
        Creates a new instance.

        Note: Although the seed size is 128 bits, only the first 64 are effective: in effect, two seeds that only differ by the last 64 bits may produce highly correlated sequences.

        Parameters:
        seed - Initial seed. If the length is larger than 2, only the first 2 elements will be used; if smaller, the remaining elements will be automatically set.

        The 1st element is used to set the LCG state. The 2nd element is used to set the LCG increment; the most significant bit is discarded by left shift and the increment is set to odd.

    • Method Detail

      • setSeedInternal

        private void setSeedInternal​(long[] seed)
        Seeds the RNG.
        Parameters:
        seed - Seed.
      • bump

        private long bump​(long input)
        Provides the next state of the LCG.
        Parameters:
        input - Current state.
        Returns:
        next state
      • next

        public long next()
        Return the next random value.
        Returns:
        the next random value.
      • getStateInternal

        protected byte[] getStateInternal()
        Creates a snapshot of the RNG state.
        Overrides:
        getStateInternal in class LongProvider
        Returns:
        the internal state.