# 26 Numerics library [numerics]

## 26.5 Random number generation [rand]

### 26.5.8 Random number distribution class templates [rand.dist]

#### 26.5.8.4.1 Class template poisson_distribution[rand.dist.pois.poisson]

A poisson_distribution random number distribution produces integer values i ≥ 0 distributed according to the discrete probability function The distribution parameter μ is also known as this distribution's mean.

template<class IntType = int>
class poisson_distribution{
public:
// types
typedef IntType result_type;
typedef unspecified param_type;

// constructors and reset functions
explicit poisson_distribution(double mean = 1.0);
explicit poisson_distribution(const param_type& parm);
void reset();

// generating functions
template<class URNG>
result_type operator()(URNG& g);
template<class URNG>
result_type operator()(URNG& g, const param_type& parm);

// property functions
double mean() const;
param_type param() const;
void param(const param_type& parm);
result_type min() const;
result_type max() const;
};


 explicit poisson_distribution(double mean = 1.0); 

Requires: 0 < mean .

Effects: Constructs a poisson_distribution object; mean corresponds to the parameter of the distribution.

 double mean() const; 

Returns: The value of the mean parameter with which the object was constructed.

#### 26.5.8.4.2 Class template exponential_distribution[rand.dist.pois.exp]

An exponential_distribution random number distribution produces random numbers x > 0 distributed according to the probability density function p(x | λ) = λ ex .

template<class RealType = double>
class exponential_distribution{
public:
// types
typedef RealType result_type;
typedef unspecified param_type;

// constructors and reset functions
explicit exponential_distribution(RealType lambda = 1.0);
explicit exponential_distribution(const param_type& parm);
void reset();

// generating functions
template<class URNG>
result_type operator()(URNG& g);
template<class URNG>
result_type operator()(URNG& g, const param_type& parm);

// property functions
RealType lambda() const;
param_type param() const;
void param(const param_type& parm);
result_type min() const;
result_type max() const;
};


 explicit exponential_distribution(RealType lambda = 1.0); 

Requires: 0 < lambda .

Effects: Constructs a exponential_distribution object; lambda corresponds to the parameter of the distribution.

 RealType lambda() const; 

Returns: The value of the lambda parameter with which the object was constructed.

#### 26.5.8.4.3 Class template gamma_distribution[rand.dist.pois.gamma]

A gamma_distribution random number distribution produces random numbers x > 0 distributed according to the probability density function

template<class RealType = double>
class gamma_distribution{
public:
// types
typedef RealType result_type;
typedef unspecified param_type;

// constructors and reset functions
explicit gamma_distribution(RealType alpha = 1.0, RealType beta = 1.0);
explicit gamma_distribution(const param_type& parm);
void reset();

// generating functions
template<class URNG>
result_type operator()(URNG& g);
template<class URNG>
result_type operator()(URNG& g, const param_type& parm);

// property functions
RealType alpha() const;
RealType beta() const;
param_type param() const;
void param(const param_type& parm);
result_type min() const;
result_type max() const;
};


 explicit gamma_distribution(RealType alpha = 1.0, RealType beta = 1.0); 

Requires: 0 < alpha and 0 < beta .

Effects: Constructs a gamma_distribution object; alpha and beta correspond to the parameters of the distribution.

 RealType alpha() const; 

Returns: The value of the alpha parameter with which the object was constructed.

 RealType beta() const; 

Returns: The value of the beta parameter with which the object was constructed.

#### 26.5.8.4.4 Class template weibull_distribution[rand.dist.pois.weibull]

A weibull_distribution random number distribution produces random numbers x ≥ 0 distributed according to the probability density function

template<class RealType = double>
class weibull_distribution{
public:
// types
typedef RealType result_type;
typedef unspecified param_type;

// constructor and reset functions
explicit weibull_distribution(RealType a = 1.0, RealType b = 1.0);
explicit weibull_distribution(const param_type& parm);
void reset();

// generating functions
template<class URNG>
result_type operator()(URNG& g);
template<class URNG>
result_type operator()(URNG& g, const param_type& parm);

// property functions
RealType a() const;
RealType b() const;
param_type param() const;
void param(const param_type& parm);
result_type min() const;
result_type max() const;
};


 explicit weibull_distribution(RealType a = 1.0, RealType b = 1.0); 

Requires: 0 < a and 0 < b .

Effects: Constructs a weibull_distribution object; a and b correspond to the respective parameters of the distribution.

 RealType a() const; 

Returns: The value of the a parameter with which the object was constructed.

 RealType b() const; 

Returns: The value of the b parameter with which the object was constructed.

#### 26.5.8.4.5 Class template extreme_value_distribution[rand.dist.pois.extreme]

An extreme_value_distribution random number distribution produces random numbers x distributed according to the probability density function280

template<class RealType = double>
class extreme_value_distribution{
public:
// types
typedef RealType result_type;
typedef unspecified param_type;

// constructor and reset functions
explicit extreme_value_distribution(RealType a = 0.0, RealType b = 1.0);
explicit extreme_value_distribution(const param_type& parm);
void reset();

// generating functions
template<class URNG>
result_type operator()(URNG& g);
template<class URNG>
result_type operator()(URNG& g, const param_type& parm);

// property functions
RealType a() const;
RealType b() const;
param_type param() const;
void param(const param_type& parm);
result_type min() const;
result_type max() const;
};


 explicit extreme_value_distribution(RealType a = 0.0, RealType b = 1.0); 

Requires: 0 < b .

Effects: Constructs an extreme_value_distribution object; a and b correspond to the respective parameters of the distribution.

 RealType a() const; 

Returns: The value of the a parameter with which the object was constructed.

 RealType b() const; 

Returns: The value of the b parameter with which the object was constructed.

The distribution corresponding to this probability density function is also known (with a possible change of variable) as the Gumbel Type I, the log-Weibull, or the Fisher-Tippett Type I distribution.