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 probabilty.**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

`// 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;` `}` |

**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

`// 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;` `}` |

**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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**

In case you wish to attend live classes with industry experts, please refer **DSA Live Classes**