pub struct MersenneTwister {
pub mt: [u32; 624],
pub mti: usize,
}Expand description
Canonical MT19937 generator (N = 624, M = 397).
2496-byte state - kept behind alloc because RngBackend always
boxes it.
§Examples
use vrd::random::MersenneTwister;
let mut mt = MersenneTwister::new();
mt.seed(42);
let n = mt.rand();Fields§
§mt: [u32; 624]Internal MT19937 state vector - 624 32-bit words.
§Examples
use vrd::random::MersenneTwister;
let mt = MersenneTwister::new();
assert_eq!(mt.mt.len(), 624);mti: usizeCurrent index into Self::mt. Reaches 624 and triggers
the next twist; an unseeded generator starts at 625.
§Examples
use vrd::random::MersenneTwister;
let mut mt = MersenneTwister::new();
assert_eq!(mt.mti, 625); // unseeded sentinel
mt.seed(1);
assert_eq!(mt.mti, 624);Implementations§
Source§impl MersenneTwister
impl MersenneTwister
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new generator with an empty state. Call Self::seed
before use.
§Examples
use vrd::random::MersenneTwister;
let mt = MersenneTwister::new();
assert_eq!(mt.mti(), 625);Sourcepub fn from_seed(seed: [u8; 32]) -> Self
pub fn from_seed(seed: [u8; 32]) -> Self
Seeds the generator from a 32-byte buffer; only the low 4 bytes
are needed for MT19937 itself, but accepting 32 bytes keeps the
API consistent with Xoshiro256PlusPlus::from_seed. The full
32 bytes are mixed via XOR-fold so callers don’t silently lose
entropy.
§Examples
use vrd::random::MersenneTwister;
let seed = [1u8; 32];
let mt = MersenneTwister::from_seed(seed);Sourcepub fn seed(&mut self, seed: u32)
pub fn seed(&mut self, seed: u32)
Seeds the MT state from a 32-bit value using the canonical Knuth multiplier constant.
§Examples
use vrd::random::MersenneTwister;
let mut mt = MersenneTwister::new();
mt.seed(12345);Sourcepub fn twist(&mut self)
pub fn twist(&mut self)
Performs the MT twist on the state vector.
§Examples
use vrd::random::MersenneTwister;
let mut mt = MersenneTwister::new();
mt.seed(42);
mt.twist();Sourcepub fn rand(&mut self) -> u32
pub fn rand(&mut self) -> u32
Generates the next u32.
§Examples
use vrd::random::MersenneTwister;
let mut mt = MersenneTwister::new();
mt.seed(42);
let n = mt.rand();Sourcepub fn next_u64(&mut self) -> u64
pub fn next_u64(&mut self) -> u64
Generates the next u64 by combining two u32 outputs.
§Examples
use vrd::random::MersenneTwister;
let mut mt = MersenneTwister::new();
mt.seed(42);
let n = mt.next_u64();Trait Implementations§
Source§impl Clone for MersenneTwister
impl Clone for MersenneTwister
Source§fn clone(&self) -> MersenneTwister
fn clone(&self) -> MersenneTwister
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MersenneTwister
impl Debug for MersenneTwister
Source§impl Default for MersenneTwister
impl Default for MersenneTwister
Source§impl<'de> Deserialize<'de> for MersenneTwister
impl<'de> Deserialize<'de> for MersenneTwister
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Hash for MersenneTwister
impl Hash for MersenneTwister
Source§impl Ord for MersenneTwister
impl Ord for MersenneTwister
Source§fn cmp(&self, other: &MersenneTwister) -> Ordering
fn cmp(&self, other: &MersenneTwister) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for MersenneTwister
impl PartialEq for MersenneTwister
Source§impl PartialOrd for MersenneTwister
impl PartialOrd for MersenneTwister
Source§impl SeedableRng for MersenneTwister
impl SeedableRng for MersenneTwister
Source§type Seed = [u8; 32]
type Seed = [u8; 32]
u8
arrays (we recommend [u8; N] for some N). Read more§fn seed_from_u64(state: u64) -> Self
fn seed_from_u64(state: u64) -> Self
u64 seed. Read more§fn from_rng<R>(rng: &mut R) -> Selfwhere
R: Rng + ?Sized,
fn from_rng<R>(rng: &mut R) -> Selfwhere
R: Rng + ?Sized,
Rng. Read moreSource§impl Serialize for MersenneTwister
impl Serialize for MersenneTwister
Source§impl TryRng for MersenneTwister
impl TryRng for MersenneTwister
Source§type Error = Infallible
type Error = Infallible
Source§fn try_next_u32(&mut self) -> Result<u32, Self::Error>
fn try_next_u32(&mut self) -> Result<u32, Self::Error>
u32.Source§fn try_next_u64(&mut self) -> Result<u64, Self::Error>
fn try_next_u64(&mut self) -> Result<u64, Self::Error>
u64.impl Eq for MersenneTwister
impl StructuralPartialEq for MersenneTwister
Auto Trait Implementations§
impl Freeze for MersenneTwister
impl RefUnwindSafe for MersenneTwister
impl Send for MersenneTwister
impl Sync for MersenneTwister
impl Unpin for MersenneTwister
impl UnsafeUnpin for MersenneTwister
impl UnwindSafe for MersenneTwister
Blanket Implementations§
§impl<R> TryRngCore for Rwhere
R: TryRng,
impl<R> TryRngCore for Rwhere
R: TryRng,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<R> Rng for Rwhere
R: TryRng<Error = Infallible> + ?Sized,
impl<R> Rng for Rwhere
R: TryRng<Error = Infallible> + ?Sized,
§impl<R> RngExt for Rwhere
R: Rng + ?Sized,
impl<R> RngExt for Rwhere
R: Rng + ?Sized,
§fn random<T>(&mut self) -> Twhere
StandardUniform: Distribution<T>,
fn random<T>(&mut self) -> Twhere
StandardUniform: Distribution<T>,
StandardUniform distribution. Read more§fn random_iter<T>(self) -> Iter<StandardUniform, Self, T>where
Self: Sized,
StandardUniform: Distribution<T>,
fn random_iter<T>(self) -> Iter<StandardUniform, Self, T>where
Self: Sized,
StandardUniform: Distribution<T>,
§fn random_range<T, R>(&mut self, range: R) -> Twhere
T: SampleUniform,
R: SampleRange<T>,
fn random_range<T, R>(&mut self, range: R) -> Twhere
T: SampleUniform,
R: SampleRange<T>,
§fn random_bool(&mut self, p: f64) -> bool
fn random_bool(&mut self, p: f64) -> bool
p of being true. Read more§fn random_ratio(&mut self, numerator: u32, denominator: u32) -> bool
fn random_ratio(&mut self, numerator: u32, denominator: u32) -> bool
numerator/denominator of being
true. Read more