Crate rand_xoshiro

Source
Expand description

This crate implements the xoshiro family of pseudorandom number generators designed by David Blackman and Sebastiano Vigna. They feature high performance and a small state and supersede the previous xorshift-based generators. However, they are not cryptographically secure and their output can be predicted by observing a few samples.

The following generators are implemented:

§64-bit generators

  • Xoshiro256StarStar: Recommended for all purposes. Excellent speed and a state space (256 bits) large enough for any parallel application.
  • Xoshiro256PlusPlus: Recommended for all purposes. Excellent speed and a state space (256 bits) large enough for any parallel application.
  • Xoshiro256Plus: Recommended for generating 64-bit floating-point numbers. About 15% faster than Xoshiro256StarStar, but has a low linear complexity in the lowest bits (which are discarded when generating floats), making it fail linearity tests. This is unlikely to have any impact in practise.
  • Xoroshiro128StarStar: An alternative to Xoshiro256StarStar, having the same speed but using half the state. Only suited for low-scale parallel applications.
  • Xoroshiro128PlusPlus: An alternative to Xoshiro256PlusPlus, having the same speed but using half the state. Only suited for low-scale parallel applications.
  • Xoroshiro128Plus: An alternative to Xoshiro256Plus, having the same speed but using half the state. Only suited for low-scale parallel applications. Has a low linear complexity in the lowest bits (which are discarded when generating floats), making it fail linearity tests. This is unlikely to have any impact in practise.
  • Xoshiro512StarStar: An alternative to Xoshiro256StarStar with more state and the same speed.
  • Xoshiro512PlusPlus: An alternative to Xoshiro256PlusPlus with more state and the same speed.
  • Xoshiro512Plus: An alternative to Xoshiro512Plus with more state and the same speed. Has a low linear complexity in the lowest bits (which are discarded when generating floats), making it fail linearity tests. This is unlikely to have any impact in practise.
  • SplitMix64: Recommended for initializing generators of the xoshiro family from a 64-bit seed. Used for implementing seed_from_u64.

§32-bit generators

  • Xoshiro128StarStar: Recommended for all purposes. Excellent speed.
  • Xoshiro128PlusPlus: Recommended for all purposes. Excellent speed.
  • Xoshiro128Plus: Recommended for generating 32-bit floating-point numbers. Faster than Xoshiro128StarStar, but has a low linear complexity in the lowest bits (which are discarded when generating floats), making it fail linearity tests. This is unlikely to have any impact in practise.
  • Xoroshiro64StarStar: An alternative to Xoshiro128StarStar, having the same speed but using half the state.
  • Xoroshiro64Star: An alternative to Xoshiro128Plus, having the same speed but using half the state. Has a low linear complexity in the lowest bits (which are discarded when generating floats), making it fail linearity tests. This is unlikely to have any impact in practise.

The *PlusPlus generators perform similarly to the *StarStar generators. See the xoshiro paper, where the differences are discussed in detail.

§Example

To initialize a generator, use the SeedableRng trait:

use rand_core::{SeedableRng, RngCore};
use rand_xoshiro::Xoshiro256PlusPlus;

let mut rng = Xoshiro256PlusPlus::seed_from_u64(0);
let x = rng.next_u64();

Re-exports§

pub use rand_core;

Structs§

Seed512
512-bit seed for a generator.
SplitMix64
A splitmix64 random number generator.
Xoroshiro64Star
A xoroshiro64* random number generator.
Xoroshiro64StarStar
A xoroshiro64** random number generator.
Xoroshiro128Plus
A xoroshiro128+ random number generator.
Xoroshiro128PlusPlus
A xoroshiro128++ random number generator.
Xoroshiro128StarStar
A xoroshiro128** random number generator.
Xoshiro128Plus
A xoshiro128+ random number generator.
Xoshiro128PlusPlus
A xoshiro128++ random number generator.
Xoshiro128StarStar
A xoshiro128** random number generator.
Xoshiro256Plus
A xoshiro256+ random number generator.
Xoshiro256PlusPlus
A xoshiro256++ random number generator.
Xoshiro256StarStar
A xoshiro256** random number generator.
Xoshiro512Plus
A xoshiro512+ random number generator.
Xoshiro512PlusPlus
A xoshiro512++ random number generator.
Xoshiro512StarStar
A xoshiro512** random number generator.