SplitMix64 Class

Represents a pseudo-random number generator based on the SplitMix64 algorithm.

Definition

Namespace: Numerics.NET.Random
Assembly: Numerics.NET (in Numerics.NET.dll) Version: 10.3.0
C#
public sealed class SplitMix64 : RandomSource<ScalarGenerator64<SplitMix64Engine>>, 
	IRandomSourceFactory<SplitMix64>, IAdvanceable
Inheritance
Object  →  RandomSource<ScalarGenerator64<SplitMix64Engine>>  →  SplitMix64
Implements
IAdvanceable, IRandomSourceFactory<SplitMix64>

Remarks

Use the SplitMix64 class to represent a pseudo-random number generator that uses the SplitMix64 algorithm by Guy Steele and Doug Lea.

This generator is primarily designed for seeding other generators and is compatible with Java's SplittableRandom. It has a period of 264.

The algorithm is fast and produces good quality random sequences, though it is not recommended for highly parallel applications or when cryptographic security is required.

Reference: Guy L. Steele Jr., Doug Lea, and Christine H. Flood. "Fast splittable pseudorandom number generators." OOPSLA 2014.

Example

C#
var rng = new SplitMix64(12345);
double x = rng.NextDouble();
ulong value = rng.NextUInt64();

Constructors

SplitMix64() Initializes a new instance of the SplitMix64 class using OS entropy.
SplitMix64(RandomOptions) Initializes a new instance of the SplitMix64 class with the specified options.
SplitMix64(ReadOnlySpan<Byte>) Initializes a new instance of the SplitMix64 class from saved state.
SplitMix64(UInt64) Initializes a new instance of the SplitMix64 class with direct state initialization.
SplitMix64(Int64, SeedProfile) Initializes a new instance of the SplitMix64 class with the specified seed.
SplitMix64(ReadOnlySpan<UInt64>, SeedProfile) Initializes a new instance of the SplitMix64 class with the specified seed array.
SplitMix64(Int64, StreamAddress, SeedProfile) Initializes a new instance of the SplitMix64 class with the specified seed.
SplitMix64(ReadOnlySpan<UInt64>, StreamAddress, SeedProfile) Initializes a new instance of the SplitMix64 class with the specified seed array.

Properties

BitsPerWord Gets the number of bits per word in the generator's native output.
(Overrides RandomSource<TGenerator>.BitsPerWord)
Name Gets a human-readable name for this random number generator.
(Overrides RandomSource<TGenerator>.Name)
StateSize Gets the number of bytes required to save/load this generator's state.
(Inherited from RandomSource<TGenerator>)
Uncached Gets an uncached facade for this random number generator.
(Inherited from RandomSource<TGenerator>)

Methods

Advance Advances the RNG state by the specified number of outputs.
Copy Returns a deep copy of this RNG.
Create Creates a new SplitMix64 instance from the specified options.
CreateStreamTree Creates a hierarchical stream tree for generating independent RNG streams.
EqualsDetermines whether the specified object is equal to the current object.
(Inherited from Object)
Fill(Span<UInt32>) Fills a span with random 32-bit unsigned integer values.
(Inherited from RandomSource<TGenerator>)
Fill(Span<Int32>, Int32) Fills a span with random 32-bit signed integers less than the specified maximum.
(Inherited from RandomSource<TGenerator>)
Fill(Span<Int64>, Int64) Fills a span with random 64-bit signed integers less than the specified maximum.
(Inherited from RandomSource<TGenerator>)
Fill(Span<Int32>, Int32, Int32) Fills a span with random 32-bit signed integers within a specified range.
(Inherited from RandomSource<TGenerator>)
Fill(Span<Int64>, Int64, Int64) Fills a span with random 64-bit signed integers within a specified range.
(Inherited from RandomSource<TGenerator>)
GetHashCodeServes as the default hash function.
(Inherited from Object)
GetState Returns the current state of the generator as a byte array.
(Inherited from RandomSource<TGenerator>)
GetTypeGets the Type of the current instance.
(Inherited from Object)
LoadState Loads the generator's state from the source span in a stable little-endian format.
(Inherited from RandomSource<TGenerator>)
Mix Applies the SplitMix64 mixing function to a 64-bit value.
Next() Returns a non-negative random integer.
(Inherited from RandomSource<TGenerator>)
Next(Int32) Returns a non-negative random integer less than the specified maximum.
(Inherited from RandomSource<TGenerator>)
Next(Int32, Int32) Returns a random integer within a specified range.
(Inherited from RandomSource<TGenerator>)
NextBytes(Byte[]) Fills the elements of a specified array of bytes with random numbers.
(Inherited from RandomSource<TGenerator>)
NextBytes(Span<Byte>) Fills the elements of a specified span of bytes with random numbers.
(Inherited from RandomSource<TGenerator>)
NextBytes(Byte[], Boolean) Fills the elements of a specified span of bytes with random numbers.
(Inherited from RandomSource<TGenerator>)
NextBytes(Span<Byte>, Boolean) Fills the elements of a specified span of bytes with random numbers.
(Inherited from RandomSource<TGenerator>)
NextDouble Returns a random floating-point number in the range [0.0, 1.0).
(Inherited from RandomSource<TGenerator>)
NextInt64() Returns a non-negative random 64-bit integer.
(Inherited from RandomSource<TGenerator>)
NextInt64(Int64) Returns a non-negative random 64-bit integer less than the specified maximum.
(Inherited from RandomSource<TGenerator>)
NextInt64(Int64, Int64) Returns a random 64-bit integer within a specified range.
(Inherited from RandomSource<TGenerator>)
NextSingle Returns a random single-precision floating-point number in the range [0.0, 1.0).
(Inherited from RandomSource<TGenerator>)
NextUInt32 Returns a random 32-bit unsigned integer.
(Inherited from RandomSource<TGenerator>)
NextUInt64 Returns a random 64-bit unsigned integer.
(Inherited from RandomSource<TGenerator>)
Reinitialize Reinitializes this random number generator using the specified initialization options.
(Inherited from RandomSource<TGenerator>)
SaveState Saves the generator's state to the destination span in a stable little-endian format.
(Inherited from RandomSource<TGenerator>)
ToStringReturns a string that represents the current object.
(Inherited from Object)

See Also