pub struct SplitMix64 { /* private fields */ }Expand description
SplitMix64 generator (Steele, Lea & Flood 2014).
A single-u64-state PRNG chosen for its tiny, portable, branch-free core: it
produces a byte-identical stream for a given seed on every platform, which the
equivalence harness relies on. That cross-platform guarantee covers
next_u64 and next_f64, which are
integer arithmetic plus one exact division by a power of two; it stops at
standard_normal, whose Box–Muller transform routes
through the platform math library — see that method’s portability note. The
generator also caches the second Box–Muller variate, so standard_normal
costs one transcendental pair per two draws.
Implementations§
Source§impl SplitMix64
impl SplitMix64
Sourcepub const fn new(seed: u64) -> Self
pub const fn new(seed: u64) -> Self
Creates a generator seeded with seed.
§Arguments
seed— initial state; anyu64is valid (including0).
Sourcepub const fn next_u64(&mut self) -> u64
pub const fn next_u64(&mut self) -> u64
Draws the next 64-bit value and advances the state.
§Returns
A pseudo-random u64 uniformly distributed over the full range.
Sourcepub fn next_f64(&mut self) -> f64
pub fn next_f64(&mut self) -> f64
Draws a uniform value in [0, 1) with 53 bits of resolution.
§Returns
A pseudo-random f64 in the half-open unit interval.
Sourcepub fn standard_normal(&mut self) -> f64
pub fn standard_normal(&mut self) -> f64
Draws a standard-normal variate via Box–Muller, caching the spare.
The transform produces two independent N(0,1) variates per call; the second is cached and returned on the following call, halving the transcendental cost over a long stream.
§Portability
The draw is deterministic: one seed gives one sequence, and the u64
stream underneath it is byte-identical on every target. The variate
itself is not. Box–Muller evaluates ln, sin, and cos through the
platform math library, which is accurate to well under an ulp but is not
correctly rounded, so different targets — and even different
optimisation levels on one target — can disagree in the last ulp or two.
Compare standard-normal draws, and any statistic accumulated from them,
with a tolerance; never bit-for-bit across builds or machines.
§Returns
A pseudo-random f64 distributed as N(0, 1).
Trait Implementations§
Source§impl Clone for SplitMix64
impl Clone for SplitMix64
Source§fn clone(&self) -> SplitMix64
fn clone(&self) -> SplitMix64
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more