pub struct SmallRng(/* private fields */);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.
Trait 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 from_seed(seed: <SmallRng as SeedableRng>::Seed) -> SmallRng
 
fn from_seed(seed: <SmallRng as SeedableRng>::Seed) -> SmallRng
Create a new PRNG using the given seed. Read more
Source§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§
§impl<T> ArchivePointee for T
 
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
 
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
§fn pointer_metadata(
    _: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
 
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
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,
§impl<Q, K> Equivalent<K> for Q
 
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
 
fn equivalent(&self, key: &K) -> bool
Checks if this value is equivalent to the given key. Read more
§impl<Q, K> Equivalent<K> for Q
 
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
 
fn equivalent(&self, key: &K) -> bool
Compare self to 
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
 
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
 
fn equivalent(&self, key: &K) -> bool
Compare self to 
key and return true if they are equal.Source§impl<T> IntoEither for T
 
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
 
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts 
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
 
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts 
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> LayoutRaw for T
 
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
 
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Returns the layout of the type.
§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2where
    T: SharedNiching<N1, N2>,
    N1: Niching<T>,
    N2: Niching<T>,
 
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2where
    T: SharedNiching<N1, N2>,
    N1: Niching<T>,
    N2: Niching<T>,
§impl<T> Pointable for T
 
impl<T> Pointable for T
§impl<T> Pointee for T
 
impl<T> Pointee for T
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>(&mut self, distr: D) -> Twhere
    D: Distribution<T>,
 
fn sample<T, D>(&mut self, distr: D) -> Twhere
    D: Distribution<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.