Spec-Zone.ru › C++

std::negative_binomial_distribution

Определено в заголовке <random>
template< class IntType = int >
class negative_binomial_distribution;
(с C++11)

Производит случайные целочисленные значения i без знака, распределённые в соответствии с дискретной функцией вероятности: \(P(i|k, p) = \binom{k + i - 1}{i} \cdot p^k \cdot (1 - p)^i\)P(i|k,p) =

⎛
⎜
⎝k + i − 1
i⎞
⎟
⎠
· pk · (1 − p)i

Значение представляет количество неудач в серии независимых испытаний «да/нет» (каждое успешно с вероятностью p), прежде чем произойдёт ровно k успехов.

std::negative_binomial_distribution удовлетворяет RandomNumberDistribution.

Параметры шаблона

IntType - Тип результата, генерируемый генератором. Эффект не определён, если это не один из short, int, long, long long, unsigned short, unsigned int, unsigned long, или unsigned long long.

Типы членов

Тип члена Определение
result_type (C++11) IntType
param_type (C++11) тип набора параметров, см. RandomNumberDistribution.

Члены-функции

(конструктор)
(C++11)
создаёт новую распределённую величину
(общедоступная функция-член)
reset
(C++11)
сбрасывает внутреннее состояние распределения
(общедоступная функция-член)
Генерация
operator()
(C++11)
генерирует следующее случайное число в распределении
(общедоступная функция-член)
Характеристики
pk
(C++11)
возвращает параметры распределения
(общедоступная функция-член)
param
(C++11)
получает или задаёт объект параметров распределения
(общедоступная функция-член)
min
(C++11)
возвращает минимально возможное сгенерированное значение
(общедоступная функция-член)
max
(C++11)
возвращает максимально возможное сгенерированное значение
(общедоступная функция-член)

Функции без имени

operator==operator!=
(C++11)(C++11)(удалено в C++20)
сравнивает два объекта распределения
(функция)
operator<<operator>>
(C++11)
выполняет ввод и вывод потока на псевдослучайное числовое распределение
(шаблон функции)

Пример

#include <iomanip>
#include <iostream>
#include <map>
#include <random>
#include <string>
 
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    // Pat goes door-to-door selling cookies
    // At each house, there's a 75% chance that she sells one box
    // how many times will she be turned away before selling 5 boxes?
    std::negative_binomial_distribution<> d(5, 0.75);
 
    std::map<int, int> hist;
    for (int n = 0; n != 10000; ++n)
        ++hist[d(gen)];
 
    for (auto [x, y] : hist)
        std::cout << std::hex << x << ' ' << std::string(y / 100, '*') << '\n';
}

Возможный вывод:

0 ***********************
1 *****************************
2 **********************
3 *************
4 ******
5 ***
6 *
7
8
9
a
b

Внешние ссылки

Weisstein, Eric W. «Распределение отрицательного биномиального.» Из MathWorld — Интернет-ресурс Wolfram.

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/random/negative_binomial_distribution

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API