Generating random samples from probability distributions
This module is the home of the
Distribution trait and several of its
implementations. It is the workhorse behind some of the convenient
functionality of the
Rng trait, e.g.
Abstractly, a probability distribution describes the probability of occurance of each value in its sample space.
More concretely, an implementation of
Distribution<T> for type
X is an
algorithm for choosing values from the sample space (a subset of
according to the distribution
X represents, using an external source of
randomness (an RNG supplied to the
X may implement
Distribution<T> for multiple types
Any type implementing
Distribution is stateless (i.e. immutable),
but it may have internal parameters set at construction time (for example,
Uniform allows specification of its sample space as a range within
Standard distribution is important to mention. This is the
distribution used by
Rng::gen() and represents the "default" way to
produce a random value for many different types, including most primitive
types, tuples, arrays, and a few derived types. See the documentation of
Standard for more details.
Uniform distribution is more flexible than
Standard, but also
more specialised: it supports fewer target types, but allows the sample
space to be specified as an arbitrary range within its target type
Uniform are in some sense uniform distributions.
Values may be sampled from this distribution using
by creating a distribution object with
From<Range>. When the range limits are not
known at compile time it is typically faster to reuse an existing
distribution object than to call
T may also implement
although this is less straightforward than for
Standard (see the
documentation in the
uniform module. Doing so enables generation of
values of type
There are surprisingly many ways to uniformly generate random floats. A
range between 0 and 1 is standard, but the exact bounds (open vs closed)
and accuracy differ. In addition to the
Standard distribution Rand offers
OpenClosed01. See "Floating point implementation" section of
Standard documentation for more details.
For weighted sampling from a sequence of discrete values, use the
A distribution uniformly sampling numbers within a given range.
Weighted index sampling
The Bernoulli distribution.
The Beta distribution with shape parameters
The binomial distribution
The Cauchy distribution
The chi-squared distribution
The dirichelet distribution
An iterator that generates random values of
The exponential distribution
Samples floating-point numbers according to the exponential distribution,
with rate parameter
The Fisher F distribution
The Gamma distribution
The log-normal distribution
The normal distribution
A distribution to sample floating point numbers uniformly in the open
A distribution to sample floating point numbers uniformly in the half-open
Samples floating-point numbers according to the Pareto distribution
The Poisson distribution
A generic random value distribution, implemented for many primitive types. Usually generates values with a numerically uniform distribution, and with a range appropriate to the type.
Samples floating-point numbers according to the normal distribution
The Student t distribution,
The triangular distribution.
Sample values uniformly between two bounds.
Samples uniformly from the edge of the unit circle in two dimensions.
Samples uniformly from the surface of the unit sphere in three dimensions.
Samples floating-point numbers according to the Weibull distribution
Error type returned from
Types (distributions) that can be used to create a random instance of