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