Trait Distribution
pub trait Distribution<T>
Types (distributions) that can be used to create a random instance of T.
It is possible to sample from a distribution through both the
Distribution and RngExt traits, via distr.sample(&mut rng) and
rng.sample(distr). They also both offer the sample_iter method, which
produces an iterator that samples from the distribution.
All implementations are expected to be immutable; this has the significant advantage of not needing to consider thread safety, and for most distributions efficient state-less sampling algorithms are available.
Implementations are typically expected to be portable with reproducible
results when used with a PRNG with fixed seed; see the
portability chapter
of The Rust Rand Book. In some cases this does not apply, e.g. the usize
type requires different sampling on 32-bit and 64-bit machines.
Required Methods
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> TGenerate a random value of
T, usingrngas the source of randomness.
Provided Methods
fn sample_iter<R>(self, rng: R) -> Iter<Self, R, T> where R: Rng, Self: Sized,Create an iterator that generates random values of
T, usingrngas the source of randomness.Note that this function takes
selfby value. This works sinceDistribution<T>is impl'd for&DwhereD: Distribution<T>, however borrowing is not automatic hencedistr.sample_iter(...)may need to be replaced with(&distr).sample_iter(...)to borrow or(&*distr).sample_iter(...)to reborrow an existing reference.Example
use ; let mut rng = rng; // Vec of 16 x f32: let v: = StandardUniform.sample_iter.take.collect; // String: let s: String = Alphanumeric .sample_iter .take .map .collect; // Dice-rolling: let die_range = new_inclusive.unwrap; let mut roll_die = die_range.sample_iter; while roll_die.next.unwrap != 6fn map<F, S>(self, func: F) -> Map<Self, F, T, S> where F: Fn(T) -> S, Self: Sized,Map sampled values to type
SExample
use ; let die = new_inclusive.unwrap; let even_number = die.map; while !even_number.sample
Implementors
impl Distribution<()> for StandardUniformimpl Distribution<NonZero<i128>> for StandardUniformimpl Distribution<NonZero<i16>> for StandardUniformimpl Distribution<NonZero<i32>> for StandardUniformimpl Distribution<NonZero<i64>> for StandardUniformimpl Distribution<NonZero<i8>> for StandardUniformimpl Distribution<NonZero<u128>> for StandardUniformimpl Distribution<NonZero<u16>> for StandardUniformimpl Distribution<NonZero<u32>> for StandardUniformimpl Distribution<NonZero<u64>> for StandardUniformimpl Distribution<NonZero<u8>> for StandardUniformimpl Distribution<__m128i> for StandardUniformimpl Distribution<__m256i> for StandardUniformimpl Distribution<bool> for Bernoulliimpl Distribution<bool> for StandardUniformimpl Distribution<char> for StandardUniformimpl Distribution<f32> for Open01impl Distribution<f32> for OpenClosed01impl Distribution<f32> for StandardUniformimpl Distribution<f64> for Open01impl Distribution<f64> for OpenClosed01impl Distribution<f64> for StandardUniformimpl Distribution<i128> for StandardUniformimpl Distribution<i16> for StandardUniformimpl Distribution<i32> for StandardUniformimpl Distribution<i64> for StandardUniformimpl Distribution<i8> for StandardUniformimpl Distribution<u128> for StandardUniformimpl Distribution<u16> for StandardUniformimpl Distribution<u32> for StandardUniformimpl Distribution<u64> for StandardUniformimpl Distribution<u8> for Alphabeticimpl Distribution<u8> for Alphanumericimpl Distribution<u8> for StandardUniformimpl<'a, T> Distribution<&'a T> for Choose<'a, T>impl<A> Distribution<(A,)> for StandardUniform where StandardUniform: Distribution<A>,impl<A, B> Distribution<(A, B)> for StandardUniform where StandardUniform: Distribution<A> + Distribution<B>,impl<A, B, C> Distribution<(A, B, C)> for StandardUniform where StandardUniform: Distribution<A> + Distribution<B> + Distribution<C>,impl<A, B, C, D> Distribution<(A, B, C, D)> for StandardUniform where StandardUniform: Distribution<A> + Distribution<B> + Distribution<C> + Distribution<D>,impl<A, B, C, D, E> Distribution<(A, B, C, D, E)> for StandardUniform where StandardUniform: Distribution<A> + Distribution<B> + Distribution<C> + Distribution<D> + Distribution<E>,impl<A, B, C, D, E, F> Distribution<(A, B, C, D, E, F)> for StandardUniform where StandardUniform: Distribution<A> + Distribution<B> + Distribution<C> + Distribution<D> + Distribution<E> + Distribution<F>,impl<A, B, C, D, E, F, G> Distribution<(A, B, C, D, E, F, G)> for StandardUniform where StandardUniform: Distribution<A> + Distribution<B> + Distribution<C> + Distribution<D> + Distribution<E> + Distribution<F> + Distribution<G>,impl<A, B, C, D, E, F, G, H> Distribution<(A, B, C, D, E, F, G, H)> for StandardUniform where StandardUniform: Distribution<A> + Distribution<B> + Distribution<C> + Distribution<D> + Distribution<E> + Distribution<F> + Distribution<G> + Distribution<H>,impl<A, B, C, D, E, F, G, H, I> Distribution<(A, B, C, D, E, F, G, H, I)> for StandardUniform where StandardUniform: Distribution<A> + Distribution<B> + Distribution<C> + Distribution<D> + Distribution<E> + Distribution<F> + Distribution<G> + Distribution<H> + Distribution<I>,impl<A, B, C, D, E, F, G, H, I, J> Distribution<(A, B, C, D, E, F, G, H, I, J)> for StandardUniform where StandardUniform: Distribution<A> + Distribution<B> + Distribution<C> + Distribution<D> + Distribution<E> + Distribution<F> + Distribution<G> + Distribution<H> + Distribution<I> + Distribution<J>,impl<A, B, C, D, E, F, G, H, I, J, K> Distribution<(A, B, C, D, E, F, G, H, I, J, K)> for StandardUniform where StandardUniform: Distribution<A> + Distribution<B> + Distribution<C> + Distribution<D> + Distribution<E> + Distribution<F> + Distribution<G> + Distribution<H> + Distribution<I> + Distribution<J> + Distribution<K>,impl<A, B, C, D, E, F, G, H, I, J, K, L> Distribution<(A, B, C, D, E, F, G, H, I, J, K, L)> for StandardUniform where StandardUniform: Distribution<A> + Distribution<B> + Distribution<C> + Distribution<D> + Distribution<E> + Distribution<F> + Distribution<G> + Distribution<H> + Distribution<I> + Distribution<J> + Distribution<K> + Distribution<L>,impl<D, F, T, S> Distribution<S> for Map<D, F, T, S> where D: Distribution<T>, F: Fn(T) -> S,impl<T> Distribution<Wrapping<T>> for StandardUniform where StandardUniform: Distribution<T>,impl<T, D: Distribution<T> + ?Sized> Distribution<T> for &Dimpl<T, const N: usize> Distribution<[T; N]> for StandardUniform where StandardUniform: Distribution<T>,impl<X> Distribution<usize> for WeightedIndex<X> where X: SampleUniform + PartialOrd,impl<X: SampleUniform> Distribution<X> for Uniform<X>