Skip to content

Latest commit

 

History

History
143 lines (122 loc) · 4.24 KB

random_number.md

File metadata and controls

143 lines (122 loc) · 4.24 KB

Pseudo-random number generation

int std::rand(): returns a pseudo-random integral value between 0 and RAND_MAX (both numbers included). RAND_MAX (macro constant) is the maximum possible value generated by std::rand

std::srand() seeds the rand(). If rand() is used before any calls to std::srand( unsigned seed), rand() behaves as if it was seeded with std::srand(1) and each time rand() is seeded with std::srand(), it must produce the same sequence of values on successive calls. to generate random number between 0 and your upperbound just use rand() % upperbound.

It is important to only invoke the srand call ONCE at the beginning of the program ( before any calls to rand()). There is no need for repeat calls to seed the random number generator in fact, it will make your number less evenly distributed. The pseudo-random number generator should only be seeded once.

Standard practice is to use the result of a call to std::time(0) (means use current time as seed for random generator) as the seed. However, std::time returns a std::time_t value, and std::time_t is not guaranteed to be an integral type. In practice, though, every major implementation defines std::time_t to be an integral type, and this is also what POSIX requires.

Refs: 1

int upperbound=100;
std::srand(std::time(0)); //use current time as seed for random generator
//Will return an integer between [0,upperbound)
std::cout<<(rand() % upperbound) <<std::endl;

Random Generator From Specific Distribution

int rangeFrom=0;
int rangeTo=1;

std::random_device rand_dev;
std::mt19937 generator(rand_dev());
std::uniform_real_distribution<double> distr(rangeFrom, rangeTo);
double rnd_number= distr(generator);

List of all available distributions:

uniform_real_distribution in the above can be replaced with:

bernoulli_distribution;
binomial_distribution;
exponential_distribution;
gamma_distribution;
geometric_distribution;
normal_distribution;
poisson_distribution;
cauchy_distribution;
chi_squared_distribution;
discrete_distribution;
extreme_value_distribution;
fisher_f_distribution;
lognormal_distribution;
negative_binomial_distribution;
piecewise_constant_distribution;
piecewise_linear_distribution;
student_t_distribution;
uniform_int_distribution;
uniform_real_distribution;
weibull_distribution;

Histogram of Distribution

------------------------bernoulli distribution------------------------
 0 *******************************************************************************************************************************************************************************************
 1 **************************************************************
------------------------exponential distribution------------------------
 0 **************************************************************************************************
 1 ***********************************************************************************************
 2 ***********************************
 3 ************
 4 ****
 5 *
 6
14
------------------------gamma distribution------------------------
 0 *******************************************************
 1 ****************************************************************************
 2 **********************************************
 3 ****************************
 4 *****************
 5 **********
 6 ******
 7 ***
 8 **
 9 *
10
11
------------------------normal distribution------------------------
-10
-9
-8
-7
-6
-5
-4
-3
-2 **
-1 ****
 0 ********
 1 *************
 2 ********************
 3 **************************
 4 *******************************
 5 *********************************
 6 *******************************
 7 **************************
 8 ********************
 9 *************
10 ********
11 ****
12 **
13
14
15
16
17
18
19
20
------------------------poisson distribution------------------------
 0 ****
 1 ******************
 2 ************************************
 3 ************************************************
 4 ************************************************
 5 ***************************************
 6 *************************
 7 **************
 8 *******
 9 ***
10 *
11
12
13


code