Compartilhar via


Classe negative_binomial_distribution

Gera uma distribuição binomial negativa.

template<class IntType = int> class negative_binomial_distribution { public:     // types     typedef IntType result_type;     struct param_type;     // constructor and reset functions     explicit negative_binomial_distribution(IntType k = 1, double p = 0.5);     explicit negative_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 k() 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 negativa. A tabela a seguir contém links para artigos sobre cada um dos membros.

negative_binomial_distribution::negative_binomial_distribution

negative_binomial_distribution::k

negative_binomial_distribution::param

negative_binomial_distribution::operator()

negative_binomial_distribution::p

negative_binomial_distribution::param_type

Os membros de propriedade k() e p() mostram os valores do parâmetro de distribuição armazenados k 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 negativa, consulte o artigo Negative Binomial Distribution da Wolfram MathWorld.

Exemplo

 

// compile with: /EHsc /W4
#include <random> 
#include <iostream>
#include <iomanip>
#include <string>
#include <map>

void test(const int k, 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::negative_binomial_distribution<> distr(k, p);

    std::cout << std::endl;
    std::cout << "k == " << distr.k() << std::endl;
    std::cout << "p == " << distr.p() << 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    k_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 k distribution (where 0 < k): ";
    std::cin >> k_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(k_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 k distribution (where 0 < k): 1
Enter a double value for p distribution (where 0.0 < p <= 1.0): .5
Enter an integer value for a sample count: 100

k == 1
p == 0.5
Histogram for 100 samples:
    0 :::::::::::::::::::::::::::::::::::::::::::
    1 ::::::::::::::::::::::::::::::::
    2 ::::::::::::
    3 :::::::
    4 ::::
    5 ::

Segunda execução:

Use CTRL-Z to bypass data entry and run using default values.
Enter an integer value for k distribution (where 0 < k): 100
Enter a double value for p distribution (where 0.0 < p <= 1.0): .667
Enter an integer value for a sample count: 100

k == 100
p == 0.667
Histogram for 100 samples:
   31 ::
   32 :
   33 ::
   34 :
   35 ::
   37 ::
   38 :
   39 :
   40 ::
   41 :::
   42 :::
   43 :::::
   44 :::::
   45 ::::
   46 ::::::
   47 ::::::::
   48 :::
   49 :::
   50 :::::::::
   51 :::::::
   52 ::
   53 :::
   54 :::::
   56 ::::
   58 :
   59 :::::
   60 ::
   61 :
   62 ::
   64 :
   69 ::::

Requisitos

Cabeçalho: <random>

Namespace: std

Consulte também

Referência

<random>