C++ named requirements:
RandomNumberDistribution (since C++11)
A RandomNumberDistribution is a function object returning random numbers according to a probability density function p(x) or a discrete probability distribution P(xi).
Requirements
The type D
satisfies RandomNumberDistribution if
- D satisfies CopyConstructible
- D satisfies CopyAssignable and
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 type Dx
andy
, (possibly const) values of type Dp
, a (possibly const) value of type Pg
,g1
,g2
, lvalues of a type satisfying UniformRandomBitGeneratoros
, lvalue of a specialization of std::basic_ostreamis
, 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