std::uniform_int_distribution class in C++

02 Jul, 2021
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:  
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
// C++ code to demonstrate the working of// operator() function #include <iostream> // for uniform_int_distribution function#include <random> using namespace std; int main(){    // Here default_random_engine object    // is used as source of randomness    // We can give seed also to default_random_engine    // if psuedorandom numbers are required    default_random_engine generator;     int a = 0, b = 9;     // Initializing of uniform_int_distribution class    uniform_int_distribution<int> distribution(a, b);     // number of experiments    const int num_of_exp = 10000;     int n = b - a + 1;    int p[n] = {};    for (int i = 0; i < num_of_exp; ++i) {         // using operator() function        // to give random values        int number = distribution(generator);        ++p[number-a];    }     cout << "Expected probability: "         << float(1) / float(n) << endl;     cout << "uniform_int_distribution ("         << a << ", " << b << ")" << endl;     // Displaying the probability of each number    // after generating values 10000 times.    for (int i = 0; i < n; ++i)        cout << a + i << ": "             << (float)p[i] / (float)(num_of_exp)             << endl;     return 0;}
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.  
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
// C++ code to demonstrate the working of// a(), b(), min(), max(), reset() function #include <iostream> // for uniform_int_distribution function#include <random> using namespace std; int main(){    int a = 10, b = 100;     // Initializing of uniform_int_distribution class    uniform_int_distribution<int> distribution(a, b);     // Using a() and b()    cout << "Lower Bound"         << " " << distribution.a() << endl;    cout << "Upper Bound"         << " " << distribution.b() << endl;     // Using min() and max()    cout << "Minimum possible output"         << " " << distribution.min() << endl;    cout << "Maximum possible output"         << " " << distribution.max() << endl;     // Using reset()    distribution.reset();    return 0;}
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 
AyushShukla8
khjoyfoysal
abhishek0719kadiyan
cpp-class
cpp-random
C++ Programs
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Passing a function as a parameter in C++
Const keyword in C++
cout in C++
Program to implement Singly Linked List in C++ using class
Different ways to print elements of vector
Program for Fibonacci numbers
Set in C++ Standard Template Library (STL)
Write a program to print all permutations of a given string
C++ Data Types
Merge two sorted arrays