Partilhar via


Classe negative_binomial_distribution

Gera uma distribuição binomial negativa.

Sintaxe

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(result_type 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
    result_type 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 encontrar os tipos possíveis, confira <random>.

Comentários

O modelo de classe descreverá 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
param_type

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

O membro da propriedade param() define ou retorna o pacote de parâmetros de distribuição armazenado param_type.

As funções membro min() e max() retornam o menor resultado possível e o maior resultado possível, respectivamente.

A função membro reset() descarta qualquer valor armazenado em cache, de forma que o resultado da próxima chamada para operator() não dependerá dos valores obtidos do mecanismo antes da chamada.

As funções membro operator() retornam o próximo valor gerado com base no mecanismo URNG, do pacote de parâmetros atual ou do pacote de parâmetros especificado.

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

Para obter informações detalhadas sobre a função de probabilidade discreta da distribuição binomial negativa, confira 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 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);
}

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

negative_binomial_distribution::negative_binomial_distribution

Constrói a distribuição.

explicit negative_binomial_distribution(result_type k = 1, double p = 0.5);
explicit negative_binomial_distribution(const param_type& parm);

Parâmetros

k
O parâmetro de distribuição k.

p
O parâmetro de distribuição p.

parm
A estrutura do parâmetro usada para construir a distribuição.

Comentários

Condição prévia: 0.0 < k e 0.0 < p ≤ 1.0

O primeiro construtor cria um objeto cujo valor p armazenado contém o valor p e cujo valor armazenado k contém o valor k.

O segundo construtor cria um objeto cujos parâmetros armazenados são inicializados de parm. Você pode chamar a função de membro param() para obter e definir os parâmetros atuais de uma distribuição existente.

negative_binomial_distribution::p tipo_arame

Armazena os parâmetros da distribuição.

struct param_type { typedef negative_binomial_distribution<result_type> distribution_type; param_type(result_type k = 1, double p = 0.5); result_type k() const; double p() const;

bool operator==(const param_type& right) const; bool operator!=(const param_type& right) const; };

Parâmetros

k
O parâmetro de distribuição k.

p
O parâmetro de distribuição p.

direita
A estrutura param_type usada para comparar.

Comentários

Condição prévia: 0.0 < k e 0.0 < p ≤ 1.0

Essa estrutura pode ser enviada ao construtor de classe de distribuição na instanciação, para a função de membro param() para definir os parâmetros armazenados de uma distribuição existente e para operator() a ser usado no lugar dos parâmetros armazenados.

Confira também

<random>