Compartilhar via


Classe binomial_distribution

Gera uma distribuição Binomial.

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

Parâmetros

  • IntType
    O tipo de resultado do inteiro assume int como padrão. Para obter os tipos possíveis, consulte <random>.

Comentários

A classe de modelo descreve uma distribuição que gera valores de um tipo integral especificado pelo usuário ou do tipo int se não houver nenhuma especificação. Esses valores são distribuídos de acordo com a função de probabilidade discreta distribuição Binomial. A tabela a seguir contém links para artigos sobre cada um dos membros.

binomial_distribution::binomial_distribution

binomial_distribution::t

binomial_distribution::param

binomial_distribution::operator()

binomial_distribution::p

binomial_distribution::param_type

Os membros de propriedade t() e p() mostram os valores do parâmetro de distribuição armazenados t e p, respectivamente.

Para obter mais informações sobre classes de distribuição e seus membros, consulte <random>.

Para obter informações detalhadas sobre a função de probabilidade discreta distribuição Binomial, consulte o artigo da Wolfram MathWorld Binomial Distribution.

Exemplo

 

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

Saída

Primeira execução:

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 :

Segunda execução:

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

Terceira execução:

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 :

Requisitos

Cabeçalho: <random>

Namespace: std

Consulte também

Referência

<random>