Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Generates a binomial distribution.
template<class IntType = int>
class binomial_distribution
{
public:
    // types
    typedef IntType result_type;
    struct param_type;
    // constructors and reset functions
    explicit binomial_distribution(IntType t = 1, double p = 0.5);
    explicit binomial_distribution(const param_type& parm);
    void reset();
    // generating functions
    template<class URNG>
    result_type operator()(URNG& gen);
    template<class URNG>
    result_type operator()(URNG& gen, const param_type& parm);
    // property functions
    IntType t() const;
    double p() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
};
Parameters
- IntType
 The integer result type, defaults to int. For possible types, see <random>.
Remarks
The template class describes a distribution that produces values of a user-specified integral type, or type int if none is provided, distributed according to the Binomial Distribution discrete probability function. The following table links to articles about individual members.
| binomial_distribution::t | binomial_distribution::param | |
| binomial_distribution::operator() | binomial_distribution::p | 
The property members t() and p() return the currently stored distribution parameter values t and p respectively.
For more information about distribution classes and their members, see <random>.
For detailed information about the binomial distribution discrete probability function, see the Wolfram MathWorld article Binomial Distribution.
Example
 // compile with: /EHsc /W4
#include <random> 
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
void test(const int t, const double p, const int& s) {
    // uncomment to use a non-deterministic seed
    //    std::random_device rd;
    //    std::mt19937 gen(rd());
    std::mt19937 gen(1729);
    std::binomial_distribution<> distr(t, p);
    std::cout << std::endl;
    std::cout << "p == " << distr.p() << std::endl;
    std::cout << "t == " << distr.t() << std::endl;
    // generate the distribution as a histogram
    std::map<int, int> histogram;
    for (int i = 0; i < s; ++i) {
        ++histogram[distr(gen)];
    }
    // print results
    std::cout << "Histogram for " << s << " samples:" << std::endl;
    for (const auto& elem : histogram) {
        std::cout << std::setw(5) << elem.first << ' ' << std::string(elem.second, ':') << std::endl;
    }
    std::cout << std::endl;
}
int main()
{
    int    t_dist = 1;
    double p_dist = 0.5;
    int    samples = 100;
    std::cout << "Use CTRL-Z to bypass data entry and run using default values." << std::endl;
    std::cout << "Enter an integer value for t distribution (where 0 <= t): ";
    std::cin >> t_dist;
    std::cout << "Enter a double value for p distribution (where 0.0 <= p <= 1.0): ";
    std::cin >> p_dist;
    std::cout << "Enter an integer value for a sample count: ";
    std::cin >> samples;
    test(t_dist, p_dist, samples);
}
Output
First run:
Use CTRL-Z to bypass data entry and run using default values.
Enter an integer value for t distribution (where 0 <= t): 22
Enter a double value for p distribution (where 0.0 <= p <= 1.0): .25
Enter an integer value for a sample count: 100
p == 0.25
t == 22
Histogram for 100 samples:
    1 :
    2 ::
    3 :::::::::::::
    4 ::::::::::::::
    5 :::::::::::::::::::::::::
    6 ::::::::::::::::::
    7 :::::::::::::
    8 ::::::
    9 ::::::
   11 :
   12 :
Second run:
Use CTRL-Z to bypass data entry and run using default values.
Enter an integer value for t distribution (where 0 <= t): 22
Enter a double value for p distribution (where 0.0 <= p <= 1.0): .5
Enter an integer value for a sample count: 100
p == 0.5
t == 22
Histogram for 100 samples:
    6 :
    7 ::
    8 :::::::::
    9 ::::::::::
   10 ::::::::::::::::
   11 :::::::::::::::::::
   12 :::::::::::
   13 :::::::::::::
   14 :::::::::::::::
   15 ::
   16 ::
Third run:
Use CTRL-Z to bypass data entry and run using default values.
Enter an integer value for t distribution (where 0 <= t): 22
Enter a double value for p distribution (where 0.0 <= p <= 1.0): .75
Enter an integer value for a sample count: 100
p == 0.75
t == 22
Histogram for 100 samples:
   13 ::::
   14 :::::::::::
   15 :::::::::::::::
   16 :::::::::::::::::::::
   17 ::::::::::::::
   18 :::::::::::::::::
   19 :::::::::::
   20 ::::::
   21 :
Requirements
Header: <random>
Namespace: std