Class AbstractL64X128

All Implemented Interfaces:
RandomLongSource, JumpableUniformRandomProvider, LongJumpableUniformRandomProvider, RestorableUniformRandomProvider, UniformRandomProvider
Direct Known Subclasses:
L64X128Mix, L64X128StarStar

abstract class AbstractL64X128 extends AbstractL64
This abstract class is a base for algorithms from the LXM family of generators with a 64-bit LCG and 128-bit XBG sub-generator. The class implements the state save/restore functions.
Since:
1.5
  • Field Details

    • M

      protected static final long M
      LCG multiplier.
      See Also:
    • SEED_SIZE

      private static final int SEED_SIZE
      Size of the seed vector.
      See Also:
    • XBG_STATE_SIZE

      private static final int XBG_STATE_SIZE
      Size of the XBG state vector.
      See Also:
    • x0

      protected long x0
      State 0 of the XBG.
    • x1

      protected long x1
      State 1 of the XBG.
  • Constructor Details

    • AbstractL64X128

      AbstractL64X128(long[] seed)
      Creates a new instance.
      Parameters:
      seed - Initial seed. If the length is larger than 4, only the first 4 elements will be used; if smaller, the remaining elements will be automatically set. A seed containing all zeros in the last two elements will create a non-functional XBG sub-generator and a low quality output with a period of 264.

      The 1st element is used to set the LCG increment; the least significant bit is set to odd to ensure a full period LCG. The 2nd element is used to set the LCG state.

    • AbstractL64X128

      AbstractL64X128(long seed0, long seed1, long seed2, long seed3)
      Creates a new instance using a 4 element seed. A seed containing all zeros in the last two elements will create a non-functional XBG sub-generator and a low quality output with a period of 264.

      The 1st element is used to set the LCG increment; the least significant bit is set to odd to ensure a full period LCG. The 2nd element is used to set the LCG state.

      Parameters:
      seed0 - Initial seed element 0.
      seed1 - Initial seed element 1.
      seed2 - Initial seed element 2.
      seed3 - Initial seed element 3.
    • AbstractL64X128

      AbstractL64X128(AbstractL64X128 source)
      Creates a copy instance.
      Parameters:
      source - Source to copy.
  • Method Details

    • getStateInternal

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

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

      public UniformRandomProvider jump()
      Creates a copy of the UniformRandomProvider and then retreats the state of the current instance. The copy is returned.

      The jump is performed by advancing the state of the LCG sub-generator by 1 cycle. The XBG state is unchanged.

      The jump size is the equivalent of moving the state backwards by (2128 - 1) positions. It can provide up to 264 non-overlapping subsequences.

      Specified by:
      jump in interface JumpableUniformRandomProvider
      Overrides:
      jump in class AbstractL64
      Returns:
      A copy of the current state.
    • longJump

      public JumpableUniformRandomProvider longJump()
      Creates a copy of the UniformRandomProvider and then retreats the state of the current instance. The copy is returned.

      The jump is performed by advancing the state of the LCG sub-generator by 232 cycles. The XBG state is unchanged.

      The jump size is the equivalent of moving the state backwards by 232 (2128 - 1) positions. It can provide up to 232 non-overlapping subsequences of length 232 (2128 - 1); each subsequence can provide up to 232 non-overlapping subsequences of length (2128 - 1) using the jump() method.

      Specified by:
      longJump in interface LongJumpableUniformRandomProvider
      Overrides:
      longJump in class AbstractL64
      Returns:
      A copy of the current state.