pub struct SmallRng(Xoshiro256PlusPlus);Expand description
A small-state, fast, non-crypto, non-portable PRNG
This is the “standard small” RNG, a generator with the following properties:
- Non-portable: any future library version may replace the algorithm and results may be platform-dependent. (For a small portable generator, use the rand_pcg or rand_xoshiro crate.)
 - Non-cryptographic: output is easy to predict (insecure)
 - Quality: statistically good quality
 - Fast: the RNG is fast for both bulk generation and single values, with consistent cost of method calls
 - Fast initialization
 - Small state: little memory usage (current state size is 16-32 bytes depending on platform)
 
The current algorithm is
Xoshiro256PlusPlus on 64-bit platforms and Xoshiro128PlusPlus on 32-bit
platforms. Both are also implemented by the rand_xoshiro crate.
§Seeding (construction)
This generator implements the SeedableRng trait. All methods are
suitable for seeding, but note that, even with a fixed seed, output is not
portable. Some suggestions:
- To automatically seed with a unique seed, use 
SeedableRng::from_rng:oruse rand::SeedableRng; use rand::rngs::SmallRng; let rng = SmallRng::from_rng(&mut rand::rng());SeedableRng::from_os_rng:let rng = SmallRng::from_os_rng(); - To use a deterministic integral seed, use 
seed_from_u64. This uses a hash function internally to yield a (typically) good seed from any input.let rng = SmallRng::seed_from_u64(1); - To seed deterministically from text or other input, use 
rand_seeder. 
See also Seeding RNGs in the book.
§Generation
The generators implements RngCore and thus also Rng.
See also the Random Values chapter in the book.
Tuple Fields§
§0: Xoshiro256PlusPlusTrait Implementations§
Source§impl SeedableRng for SmallRng
 
impl SeedableRng for SmallRng
Source§type Seed = [u8; 32]
 
type Seed = [u8; 32]
Seed type, which is restricted to types mutably-dereferenceable as 
u8
arrays (we recommend [u8; N] for some N). Read moreSource§fn seed_from_u64(state: u64) -> Self
 
fn seed_from_u64(state: u64) -> Self
Create a new PRNG using a 
u64 seed. Read moreSource§fn from_rng(rng: &mut impl RngCore) -> Self
 
fn from_rng(rng: &mut impl RngCore) -> Self
Create a new PRNG seeded from an infallible 
Rng. Read moreSource§fn try_from_rng<R>(rng: &mut R) -> Result<Self, <R as TryRngCore>::Error>where
    R: TryRngCore,
 
fn try_from_rng<R>(rng: &mut R) -> Result<Self, <R as TryRngCore>::Error>where
    R: TryRngCore,
Create a new PRNG seeded from a potentially fallible 
Rng. Read moreSource§fn from_os_rng() -> Self
 
fn from_os_rng() -> Self
impl Eq for SmallRng
impl StructuralPartialEq for SmallRng
Auto Trait Implementations§
impl Freeze for SmallRng
impl RefUnwindSafe for SmallRng
impl Send for SmallRng
impl Sync for SmallRng
impl Unpin for SmallRng
impl UnwindSafe for SmallRng
Blanket Implementations§
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
    T: Clone,
 
impl<T> CloneToUninit for Twhere
    T: Clone,
Source§impl<R> Rng for R
 
impl<R> Rng for R
Source§fn random<T>(&mut self) -> Twhere
    StandardUniform: Distribution<T>,
 
fn random<T>(&mut self) -> Twhere
    StandardUniform: Distribution<T>,
Return a random value via the 
StandardUniform distribution. Read moreSource§fn random_iter<T>(self) -> Iter<StandardUniform, Self, T> ⓘ
 
fn random_iter<T>(self) -> Iter<StandardUniform, Self, T> ⓘ
Source§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>,
Generate a random value in the given range. Read more
Source§fn random_bool(&mut self, p: f64) -> bool
 
fn random_bool(&mut self, p: f64) -> bool
Return a bool with a probability 
p of being true. Read moreSource§fn random_ratio(&mut self, numerator: u32, denominator: u32) -> bool
 
fn random_ratio(&mut self, numerator: u32, denominator: u32) -> bool
Return a bool with a probability of 
numerator/denominator of being
true. Read moreSource§fn sample<T, D: Distribution<T>>(&mut self, distr: D) -> T
 
fn sample<T, D: Distribution<T>>(&mut self, distr: D) -> T
Sample a new value, using the given distribution. Read more
Source§fn sample_iter<T, D>(self, distr: D) -> Iter<D, Self, T> ⓘwhere
    D: Distribution<T>,
    Self: Sized,
 
fn sample_iter<T, D>(self, distr: D) -> Iter<D, Self, T> ⓘwhere
    D: Distribution<T>,
    Self: Sized,
Create an iterator that generates values using the given distribution. Read more
Source§fn gen<T>(&mut self) -> Twhere
    StandardUniform: Distribution<T>,
 
fn gen<T>(&mut self) -> Twhere
    StandardUniform: Distribution<T>,
👎Deprecated since 0.9.0: Renamed to 
random to avoid conflict with the new gen keyword in Rust 2024.Alias for 
Rng::random.Source§fn gen_range<T, R>(&mut self, range: R) -> Twhere
    T: SampleUniform,
    R: SampleRange<T>,
 
fn gen_range<T, R>(&mut self, range: R) -> Twhere
    T: SampleUniform,
    R: SampleRange<T>,
👎Deprecated since 0.9.0: Renamed to 
random_rangeAlias for 
Rng::random_range.Source§impl<R> TryRngCore for R
 
impl<R> TryRngCore for R
Source§type Error = Infallible
 
type Error = Infallible
The type returned in the event of a RNG error.
Source§fn try_next_u32(&mut self) -> Result<u32, <R as TryRngCore>::Error>
 
fn try_next_u32(&mut self) -> Result<u32, <R as TryRngCore>::Error>
Return the next random 
u32.Source§fn try_next_u64(&mut self) -> Result<u64, <R as TryRngCore>::Error>
 
fn try_next_u64(&mut self) -> Result<u64, <R as TryRngCore>::Error>
Return the next random 
u64.Source§fn try_fill_bytes(
    &mut self,
    dst: &mut [u8],
) -> Result<(), <R as TryRngCore>::Error>
 
fn try_fill_bytes( &mut self, dst: &mut [u8], ) -> Result<(), <R as TryRngCore>::Error>
Fill 
dest entirely with random data.Source§fn unwrap_mut(&mut self) -> UnwrapMut<'_, Self>
 
fn unwrap_mut(&mut self) -> UnwrapMut<'_, Self>
Wrap RNG with the 
UnwrapMut wrapper.Source§fn read_adapter(&mut self) -> RngReadAdapter<'_, Self>where
    Self: Sized,
 
fn read_adapter(&mut self) -> RngReadAdapter<'_, Self>where
    Self: Sized,
Convert an 
RngCore to a RngReadAdapter.