class

Alea::XSR128

Inherits Alea::XSR / Alea::PRNG / Reference / Object

Alea::XSR128 is the default pseudo-random number generator, with a state of 128 bits, and therefore a period of 2^64 -1. It is as fast as Random::PCG32, but yielding a 64-bit unsigned integer. If more state is needed, check Alea::XSR256.

 - period:     2^128 -1
 - state type: UInt64

Constants

JUMP_32B_64 = StaticArray[2271477771_u32, 4114797267_u32, 1872770499_u32, 2012404571_u32]
JUMP_32B_96 = StaticArray[3039008046_u32, 191826335_u32, 3438649583_u32, 475530850_u32]
JUMP_64B_64 = StaticArray[3159176899437800924_u64, 689838746718161413_u64]
JUMP_64B_96 = StaticArray[3895567441539718553_u64, 11272061779601802979_u64]
STATE_STORAGE_32 = 4
STATE_STORAGE_64 = 2

Constructors

new(seed32 : Int, seed64 : Int)

Initializes the PRNG with initial seeds.

@parameters:

  • seed32: value as input to init. the state of 32-bit generators.
  • seed64: value as input to init. the state of 64-bit generators.

@references:

  • Alea::Core::Mulberry32(4)#init_state.
  • Alea::Core::SplitMix64(2)#init_state.

@exceptions:

  • Alea::UndefinedError if any of seed32 or seed64 is negative.
Source
new(state32 : StaticArray(UInt32, STATE_STORAGE_32), state64 : StaticArray(UInt64, STATE_STORAGE_64))

Initializes the PRNG with initial states.

@parameters:

  • state32: array of values for state of 32-bit generators.
  • state64: array of values for state of 64-bit generators.
Source
new(seed : Int)

Initializes the PRNG with initial seed.

@parameters:

  • seed: value as input to init. the state of both 32-bit and 64-bit generators.

@references:

  • Alea::Core::Mulberry32(4)#init_state.
  • Alea::Core::SplitMix64(2)#init_state.

@exceptions:

  • Alea::UndefinedError if seed is negative.
Source
new

Initializes the PRNG with initial seeds readed from system resources.

Source

Instance methods

jump_32(long : Bool = false) : self

Performs an advance over the 32-bit state. This is the equivalent of 2^64 calls to #next_u32.

@parameters:

  • long: flag to advance the state by 2^96 calls.
Source
jump_64(long : Bool = false) : self

Performs an advance over the 64-bit state. This is the equivalent of 2^64 calls to #next_u64.

@parameters:

  • long: flag to advance the state by 2^96 calls.
Source
next_u32

Generate a uniform-distributed random UInt32.

@examples:

rng = Alea::XSR128.new
rng.next_u32 # => 1767702788
Source
next_u64

Generate a uniform-distributed random UInt64.

@examples:

rng = Alea::XSR128.new
rng.next_u64 # => 9136120204379184874
Source