random header in C++ | Set 3 (Distributions)
We have discussed generators in
Set 1. We have also discussed three distributions in
Set 2. In this post, more distributions are discussed.
IV.Rate-based Distributions:
poisson_distribution |
Poisson Distribution |
exponential_distribution |
Exponential Distribution |
gamma_distribution |
Gamma Distribution |
weibull_distribution |
Weibull Distribution |
extreme_value_distribution |
Extreme Value Distribution |
1. poisson_distribution: It is a distribution that produces integers according to a Poisson distribution, which is given by the following probability mass function:
operator():It returns a new random number that follows the distribution’s parameters.
min:It returns the greatest lower bound of the range of values given by operator(), which in this case is always zero.
max: It returns the least upper bound of the range of values given by operator().
reset: It resets the distribution, so that subsequent uses of the object do not depend on values already produced by it.
param: It gets or sets the distribution parameter object .
#include <iostream>
#include <chrono>
#include <random>
using namespace std;
int main()
{
unsigned seed =
chrono::system_clock::now().time_since_epoch().count();
default_random_engine generator (seed);
poisson_distribution< int > distribution (7.1);
cout << "Poisson-distribution(mean=5.0): " ;
for ( int i=0; i<10; ++i)
cout << distribution(generator) << " " ;
cout << endl;
return 0;
}
|
Output:
Poisson-distribution(mean=5.0): 11 5 5 9 10 6 15 3 6 5
2. exponential_distribution: It is a random number distribution that produces floating-point values according to an exponential distribution, given by:
operator():It generates the random number that are distributed according to the probability function.
max: It returns the least upper bound of the range of given by operator().
max:It returns the greatest lower bound of the range given by operator(), which is always zero for exponential_distribution.
reset:It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
param: It gets or sets the distribution parameter object .
#include <iostream>
#include <chrono>
#include <thread>
#include <random>
using namespace std;
int main()
{
int seed =
chrono::system_clock::now().time_since_epoch().count();
default_random_engine generator (seed);
exponential_distribution< double > distribution (1.0);
cout << "Hi's separated by 2 seconds, on average: \n" ;
for ( int i=0; i<5; ++i)
{
double number = distribution(generator);
chrono::duration< double > period (number);
this_thread::sleep_for( period );
cout << "Hi,Geeks!!" << endl;
}
return 0;
}
|
Output:
Hi's separated by 2 seconds, on average:
Hi,Geeks!!
Hi,Geeks!!
3. gamma_distribution: It is a random number distribution that produces floating-point values according to a gamma distribution, given by:
operator():It returns a new random number that follows the distribution’s parameters.
min:It returns the greatest lower bound of the range given by member operator(), which is always zero for gamma_distribution.
max:It returns the least upper bound of the range given by operator().
reset:It resets the distribution, so that on the subsequent uses the result does not depend on values already produced by it.
param: It gets or sets the distribution parameter object .
#include <iostream>
#include <random>
using namespace std;
int main()
{
default_random_engine generator;
gamma_distribution< double > distribution(1.0,2.0);
cout << distribution(generator) << endl;
distribution.reset();
cout << distribution(generator) << endl;
return 0;
}
|
Output:
1.14392
2.23359
4. weibull_distribution:It is a random number distribution that produces floating-point values according to a 2-parameter Weibull distribution,given by:
operator():It returns a new random number that follows the distribution’s parameters.
min:It returns the greatest lower bound of the range given by operator(), which is always zero for weibull_distribution.
max:It returns the least upper bound of the range given by operator().
reset:It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
param: It gets or sets the distribution parameter object .
#include <iostream>
#include <chrono>
#include <random>
using namespace std;
int main ()
{
unsigned seed =
chrono::system_clock::now().time_since_epoch().count();
default_random_engine generator (seed);
weibull_distribution< double > distribution (2.0,1.0);
cout << distribution(generator)
<< " is a random number between " ;
cout << generator.min() << " and " << generator.max();
return 0;
}
|
Output:
1.54229 is a random number between 1 and 2147483646
5. extreme_value_distribution:It is a random number distribution that produces floating-point values according to a Type I extreme value distribution,given by:
operator():It generates the random number that are distributed according to the probability function.
min:It returns the greatest lower bound of the range given by member operator().
max:It returns the least upper bound of the range given by member operator().
reset:It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
param: It gets or sets the distribution parameter object .
#include <iostream>
#include <random>
using namespace std;
int main()
{
default_random_engine generator;
extreme_value_distribution< double > d1(2.0,4.0);
extreme_value_distribution< double > d2(d1.param());
cout << d1(generator) << endl;
cout << d2(generator) << endl;
return 0;
}
|
Output:
9.8351
3.95306
V. Related to Normal distribution
normal_distribution |
Normal Distribution |
lognormal_distribution |
Lognormal Distribution |
chi_squared_distribution |
Chi-squared Distribution |
cauchy_distribution |
Cauchy Distribution |
fisher_f_distribution |
Fisher F-Distribution |
student_t_distribution |
Student T-Distribution |
1. normal_distribution: It is a random number distribution that produces floating-point values according to a normal distribution, given by:
where:
(µ) :mean
sigma :standard deviation
operator():It generates the random number that are distributed according to the probability function.
min:It returns the greatest lower bound of the range given by operator().
max:It returns the least upper bound of the range given by operator().
reset:It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
param: It gets or sets the distribution parameter object .
#include <iostream>
#include <chrono>
#include <random>
using namespace std;
int main()
{
unsigned seed =
chrono::system_clock::now().time_since_epoch().count();
default_random_engine generator (seed);
normal_distribution< double > distribution (1.0,2.0);
cout << "Normal-distribution(1.0,2.0):" << endl;
for ( int i=0; i<5; i++)
cout << distribution(generator) << endl;
return 0;
}
|
Output:
Normal-distribution(1.0,2.0):
1.59499
-0.458303
1.34411
0.138838
3.03433
2. lognormal_distribution:It is a random number distribution that produces floating-point values according to a lognormal distribution, given by:
operator():It generates a random number which follows this distribution.
min:It returns the greatest lower bound of the range given by operator(), which is always zero for lognormal_distribution.
max:It returns the least upper bound of the range given by operator().
reset:It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
param: It gets or sets the distribution parameter object .
#include <iostream>
#include <random>
using namespace std;
int main()
{
default_random_engine generator;
lognormal_distribution< double > distribution(1.0,2.0);
cout << distribution(generator) << endl;
distribution.reset();
cout << distribution(generator) << endl;
return 0;
}
|
Output:
2.12989
10.6822
3. chi_squared_distribution:It is a random number distribution that produces floating-point values according to a chi-squared distribution,given by:
where,
n : degrees of freedom and n>0,
n/2 : shape parameter
operator():It generates the random number that are distributed according to the probability function.
min:It returns the greatest lower bound of the range given by operator(), which is always zero for the chi_squared_distribution.
max:It returns the least upper bound of the range given by operator().
reset:It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
param: It gets or sets the distribution parameter object .
#include <iostream>
#include <chrono>
#include <random>
using namespace std;
int main()
{
unsigned seed =
chrono::system_clock::now().time_since_epoch().count();
default_random_engine generator (seed);
chi_squared_distribution< double > distribution (4.0);
cout << "chi-squared-distribution(4.0):" << endl;
for ( int i=0; i<5; i++)
cout << distribution(generator) << endl;
return 0;
}
|
Output:
chi-squared-distribution(4.0):
2.18701
6.86953
1.77983
9.79626
5.04758
4. cauchy_distribution:It is a random number distribution that produces floating-point values according to a Cauchy distribution, given by:
where,
a and b are distribution parameters
operator():It generates the random number that are distributed according to the probability function.
min:It returns the greatest lower bound of the range given by operator().
max:It returns the least upper bound of the range given by operator().
reset: It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
param: It gets or sets the distribution parameter object .
#include <iostream>
#include <random>
using namespace std;
int main()
{
default_random_engine generator;
cauchy_distribution< double > d1(0.0,1.0);
cauchy_distribution< double > d2(d1.param());
cout << d1(generator) << endl;
cout << d2(generator) << endl;
return 0;
}
|
Output:
0.438486
7.65462
5. fisher_f_distribution:It is a random number distribution that produces floating-point values according to a Fisher F-distribution, given by:
It produces random numbers by dividing two independent Chi-squared distributions of m and n degrees of freedom.
operator():It generates the random number that are distributed according to the probability function.
min:It returns the greatest lower bound of the range given by operator(), which is always zero for the fisher_f_distribution.
max:It returns the least upper bound of the range given by operator().
reset: It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
param: It gets or sets the distribution parameter object .
#include <iostream>
#include <chrono>
#include <random>
using namespace std;
int main()
{
unsigned seed =
chrono::system_clock::now().time_since_epoch().count();
default_random_engine generator (seed);
fisher_f_distribution< double > distribution (1.0,2.0);
cout << "fisher-f-distribution(1.0,2.0):" << endl;
for ( int i=0; i<5; i++)
cout << distribution(generator) << endl;
return 0;
}
|
Output:
fisher-f-distribution(1.0,2.0):
0.208066
2.76882
0.0305701
0.96243
0.444256
6. student_t_distribution:It is a random number distribution that produces floating-point values according to a Student T-distribution, given by:
where,
n is the distribution parameter
operator():It generates the random number that are distributed according to the probability function.
min:It returns the greatest lower bound of the range given by operator().
max:It returns the least upper bound of the range given by operator().
reset: It resets the distribution, so that on the subsequent uses the result does not depends on the values already produced by it.
param: It gets or sets the distribution parameter object .
#include <iostream>
#include <chrono>
#include <random>
using namespace std;
int main ()
{
unsigned seed =
chrono::system_clock::now().time_since_epoch().count();
default_random_engine generator (seed);
student_t_distribution< double > distribution (8.0);
cout << distribution(generator)
<< " is a random number between " ;
cout << generator.min() << " and " << generator.max();
return 0;
}
|
Output:
0.00906058 is a random number between 1 and 2147483646
Last Updated :
12 Feb, 2018
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...