std::uniform_int_distribution class in C++
In Probability, Discrete Uniform Distribution Function refers to the distribution with constant probability for discrete values over a range and zero probability outside the range. The probability density function P(x) for uniform discrete distribution in interval [a, b] is constant for discrete values in the range [a, b] and zero otherwise. Mathematically the function is defined as:Â
Â
C++ have introduced uniform_int_distribution class in the random library whose member function give random integer numbers or discrete values from a given input range with uniform probability.
Public member functions in uniform_int_distribution class:
Â
- operator(): This function returns a random number from the given range of distribution. The probability for any number to be obtained from this function is same. Operator() function takes constant time for generation.Â
Example:Â
Â
CPP
#include <iostream>
#include <random>
using namespace std;
int main()
{
default_random_engine generator;
int a = 0, b = 9;
uniform_int_distribution< int > distribution(a, b);
const int num_of_exp = 10000;
int n = b - a + 1;
int p[n] = {};
for ( int i = 0; i < num_of_exp; ++i) {
int number = distribution(generator);
++p[number-a];
}
cout << "Expected probability: "
<< float (1) / float (n) << endl;
cout << "uniform_int_distribution ("
<< a << ", " << b << ")" << endl;
for ( int i = 0; i < n; ++i)
cout << a + i << ": "
<< ( float )p[i] / ( float )(num_of_exp)
<< endl;
return 0;
}
|
Output:Â
Expected probability: 0.1
uniform_int_distribution (0, 9)
0: 0.0993
1: 0.1007
2: 0.0998
3: 0.0958
4: 0.1001
5: 0.1049
6: 0.0989
7: 0.0963
8: 0.1026
9: 0.1016
Â
We could observe from the output that the probability of each number obtained from the random number is much closer to calculated probability.Â
Â
- a(): Returns the lower parameter of range. This specifies the lower bound of the range of values potentially returned by its member operator().Â
 - b(): Returns the higher parameter of range. This specifies the upper bound of the range of values potentially returned by its member operator().Â
 - max(): This function return the possible smallest upper bound of output possible from the operator() function.Â
 - min(): This function return the possible highest lower bound of output possible from the operator() function.Â
 - reset(): This function resets the distribution such that subsequent distributions are not dependent on the previously generated numbers.Â
Â
Example:
Â
CPP
#include <iostream>
#include <random>
using namespace std;
int main()
{
int a = 10, b = 100;
uniform_int_distribution< int > distribution(a, b);
cout << "Lower Bound"
<< " " << distribution.a() << endl;
cout << "Upper Bound"
<< " " << distribution.b() << endl;
cout << "Minimum possible output"
<< " " << distribution.min() << endl;
cout << "Maximum possible output"
<< " " << distribution.max() << endl;
distribution.reset();
return 0;
}
|
Output:Â
Lower Bound 10
Upper Bound 100
Minimum possible output 10
Maximum possible output 100
Â
Reference: https://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution
Â
Last Updated :
01 Mar, 2024
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...