C++ concepts: RandomNumberDistribution
From cppreference.com
A RandomNumberDistribution
is a function object returning random numbers according to a probability density function p(x) or a discrete probability distribution P(x
i).
Requirements
The type D
satisfies RandomNumberDistribution
if
-
D
satisfiesCopyConstructible
-
D
satisfiesCopyAssignable
Given
-
T
, the type named by D::result_type -
P
, the type named by D::param_type, which
- satisfies
CopyConstructible
- satisfies
CopyAssignable
- satisfies
EqualityComparable
- has a constructor taking identical arguments as each of the constructors of
D
that take arguments corresponding to the distribution parameters. - has a member function with the identical name, type, and semantics, as every member function of
D
that returns a parameter of the distribution - declares a member typedef using distribution_type = D;
- satisfies
-
d
, a value of typeD
-
x
andy
, (possibly const) values of typeD
-
p
, a (possibly const) value of typeP
-
g
,g1
,g2
, lvalues of a type satisfyingUniformRandomBitGenerator
-
os
, lvalue of a specialization of std::basic_ostream -
is
, lvalue of a specialization of std::basic_istream
The following expressions must be valid and have their specified effects
Expression | Type | Notes | Complexity |
---|---|---|---|
D::result_type |
T |
An arithmetic type | compile-time |
D::param_type |
P |
compile-time | |
D() |
creates a distribution indistinguishable from any other default-constructed D |
constant | |
D(p) |
creates a distribution indistinguishable from D constructed directly from the values used to construct p |
Same as p 's construction
| |
d.reset() |
void |
Resets the internal state of the distribution. The next call to operator() on d will not depend on values produced by any engine prior to reset() . |
constant |
x.param() |
P |
Returns p such that D(p).param() == p |
No worse than D(p)
|
d.param(p) |
void |
Postcondition: d.param() == p | No worse than D(p)
|
d(g) |
T |
The sequence of numbers returned by successive invocations of this call with the same g are randomly distributed according to the distribution parametrized by d.param() |
Amortized constant number of invocations of g
|
d(g,p) |
T |
The sequence of numbers returned by successive invocations of this call with the same g are randomly distributed according to the distribution parametrized by p |
Amortized constant number of invocations of g
|
x.min() |
T |
the greatest lower bound on the values potentially returned by x ’s operator() , as determined by the current values of x ’s parameters |
constant |
x.max() |
T |
the least upper bound on the values potentially returned by x ’s operator() , as determined by the current values of x ’s parameters |
constant |
x == y |
bool |
Establishes an equivalence relation. Returns true if x.param() == y.param() and future infinite sequences of values that would be generated by repeated invocations of x(g1) and y(g2) would be equal as long as g1 == g2. |
constant |
x != y |
bool |
!(x == y) |
constant |
os << x |
Reference to the type of os |
Writes a textual representation of the distribution parameters and internal state to os . The formatting flags and fill character of os are unchanged. |
|
is >> d |
Reference to the type of is |
Restores the distribution parameters and internal state with data read from is . The formatting flags of is are unchanged. The data must have been written using a stream with the same locale, CharT and Traits stream template parameters, otherwise the behavior is undefined. If bad input is encountered, is.setstate(std::ios::failbit) is called, which may throw std::ios_base::failure. d is unchanged in that case. |
Notes
The parameters of a distribution object may be changed either permanently, by using d.param(p) or just for the duration of a single operator() call, by using d(g,p).
Calls to const member functions of the distribution and os << d do not affect the sequence of numbers produced by repeated d(g).
Standard library
The following standard library components satisfy RandomNumberDistribution
(C++11) |
produces integer values evenly distributed across a range (class template) |
(C++11) |
produces real values evenly distributed across a range (class template) |
(C++11) |
produces bool values on a Bernoulli distribution. (class) |
(C++11) |
produces integer values on a binomial distribution. (class template) |
produces integer values on a negative binomial distribution. (class template) | |
(C++11) |
produces integer values on a geometric distribution. (class template) |
(C++11) |
produces integer values on a poisson distribution. (class template) |
(C++11) |
produces real values on an exponential distribution. (class template) |
(C++11) |
produces real values on an gamma distribution. (class template) |
(C++11) |
produces real values on a Weibull distribution. (class template) |
(C++11) |
produces real values on an extreme value distribution. (class template) |
(C++11) |
produces real values on a standard normal (Gaussian) distribution. (class template) |
(C++11) |
produces real values on a lognormal distribution. (class template) |
(C++11) |
produces real values on a chi-squared distribution. (class template) |
(C++11) |
produces real values on a Cauchy distribution. (class template) |
(C++11) |
produces real values on a Fisher's F-distribution. (class template) |
(C++11) |
produces real values on a Student's t-distribution. (class template) |
(C++11) |
produces random integers on a discrete distribution. (class template) |
produces real values distributed on constant subintervals. (class template) | |
produces real values distributed on defined subintervals. (class template) |