Spec-Zone.ru › C++

std::binomial_distribution

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

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

⎛
⎜
⎝t
i⎞
⎟
⎠
· pi · (1 − p)t−i

Полученное значение — количество успехов в последовательности из t экспериментов «да/нет», каждый из которых заканчивается успехом с вероятностью p.

std::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)
генерирует следующее случайное число в распределении
(публичная функция-член)
Характеристики
pt
(C++11)
возвращает параметры распределения
(публичная функция-член)
param
(C++11)
получает или устанавливает объект параметра распределения
(публичная функция-член)
min
(C++11)
возвращает минимальное потенциально генерируемое значение
(публичная функция-член)
max
(C++11)
возвращает максимальное потенциально генерируемое значение
(публичная функция-член)

Функции, не являющиеся членами

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

Пример

График биномиального распределения с вероятностью успеха каждого испытания ровно 0,5, иллюстрирующий связь с треугольником Паскаля (вероятности, что ни один, 1, 2, 3 или все четыре из 4 испытаний будут успешны в этом случае, равны 1:4:6:4:1).

#include <iomanip>
#include <iostream>
#include <map>
#include <random>
#include <string>
 
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    // perform 4 trials, each succeeds 1 in 2 times
    std::binomial_distribution<> d(4, 0.5);
 
    std::map<int, int> hist;
    for (int n = 0; n != 10000; ++n)
        ++hist[d(gen)];
 
    for (auto const& [x, y] : hist)
        std::cout << x << ' ' << std::string(y / 100, '*') << '\n';
}

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

0 ******
1 ************************
2 *************************************
3 *************************
4 ******

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

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

Spec-Zone.ru

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