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:
  • Field Details

    • SEED_SIZE

      private static final int SEED_SIZE
      Size of the seed array.
      See Also:
    • DEFAULT_INCREMENT

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

      private long state
      The state of the LCG.
    • increment

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

    • PcgRxsMXs64

      public PcgRxsMXs64(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 Details

    • 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()
      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.
    • setStateInternal

      protected void setStateInternal(byte[] s)
      Resets the RNG to the given state.
      Overrides:
      setStateInternal in class LongProvider
      Parameters:
      s - State (previously obtained by a call to BaseProvider.getStateInternal()).
      See Also: