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:
- Seed from an integer via
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);
- With a fresh seed, direct from the OS (implies a syscall):
let rng = SmallRng::from_os_rng();
- Via
SmallRng::from_thread_rng
:let rng = SmallRng::from_thread_rng();
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.
Implementations§
source§impl SmallRng
impl SmallRng
sourcepub fn from_thread_rng() -> Self
pub fn from_thread_rng() -> Self
Construct an instance seeded from the thread-local RNG
§Panics
This method panics only if thread_rng
fails to
initialize.
Trait Implementations§
source§impl PartialEq for SmallRng
impl PartialEq for SmallRng
source§impl SeedableRng for SmallRng
impl SeedableRng for SmallRng
§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: impl RngCore) -> Self
fn from_rng(rng: impl RngCore) -> Self
Create a new PRNG seeded from an infallible
Rng
. Read moresource§fn try_from_rng<R>(rng: R) -> Result<Self, <R as TryRngCore>::Error>where
R: TryRngCore,
fn try_from_rng<R>(rng: 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
source§impl TryRngCore for SmallRng
impl TryRngCore for SmallRng
§type Error = Infallible
type Error = Infallible
The type returned in the event of a RNG error.
source§fn try_fill_bytes(&mut self, dst: &mut [u8]) -> Result<(), Self::Error>
fn try_fill_bytes(&mut self, dst: &mut [u8]) -> Result<(), Self::Error>
Fill
dest
entirely with random data.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
.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§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)source§impl<R> Rng for R
impl<R> Rng for R
source§fn random<T>(&mut self) -> Twhere
Standard: Distribution<T>,
fn random<T>(&mut self) -> Twhere
Standard: Distribution<T>,
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>,
Generate a random value in the given range. Read more
source§fn gen_iter<T>(self) -> DistIter<Standard, Self, T> ⓘ
fn gen_iter<T>(self) -> DistIter<Standard, Self, T> ⓘ
Generate values via an iterator Read more
source§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) -> DistIter<D, Self, T> ⓘwhere
D: Distribution<T>,
Self: Sized,
fn sample_iter<T, D>(self, distr: D) -> DistIter<D, Self, T> ⓘwhere
D: Distribution<T>,
Self: Sized,
Create an iterator that generates values using the given distribution. Read more
source§fn gen_bool(&mut self, p: f64) -> bool
fn gen_bool(&mut self, p: f64) -> bool
Return a bool with a probability
p
of being true. Read moresource§fn gen_ratio(&mut self, numerator: u32, denominator: u32) -> bool
fn gen_ratio(&mut self, numerator: u32, denominator: u32) -> bool
Return a bool with a probability of
numerator/denominator
of being
true. I.e. gen_ratio(2, 3)
has chance of 2 in 3, or about 67%, of
returning true. If numerator == denominator
, then the returned value
is guaranteed to be true
. If numerator == 0
, then the returned
value is guaranteed to be false
. Read moresource§fn gen<T>(&mut self) -> Twhere
Standard: Distribution<T>,
fn gen<T>(&mut self) -> Twhere
Standard: 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
.