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).
The type D
satisfies RandomNumberDistribution if.
D
satisfies CopyConstructible D
satisfies CopyAssignable Given.
T
, the type named by D::result_type
P
, the type named by D::param_type
, which D
that take arguments corresponding to the distribution parameters. D
that returns a parameter of the distribution using distribution_type = D;
d
, a value of type D
x
and y
, (possibly const) values of type D
p
, a (possibly const) value of type P
g
, g1
, g2
, lvalues of a type satisfying UniformRandomBitGenerator 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  compiletime 
D::param_type  P  compiletime  
D()  creates a distribution indistinguishable from any other defaultconstructed 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. 
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)
.
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 chisquared distribution. (class template) 
(C++11)  produces real values on a Cauchy distribution. (class template) 
(C++11)  produces real values on a Fisher's Fdistribution. (class template) 
(C++11)  produces real values on a Student's tdistribution. (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 AttributionShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/named_req/RandomNumberDistribution