C++ named requirements: RandomNumberDistribution
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
satisfies CopyConstructible -
D
satisfies CopyAssignable
Given.
-
T
, the type named byD::result_type
-
P
, the type named byD::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;
-
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 satisfying UniformRandomBitGenerator -
os
, lvalue of a specialization ofstd::basic_ostream
-
is
, lvalue of a specialization ofstd::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) |
(C++11) | 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) |
(C++11) | produces real values distributed on constant subintervals. (class template) |
(C++11) | produces real values distributed on defined subintervals. (class template) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/named_req/RandomNumberDistribution