std::geometric_distribution
Определено в заголовке <random> | ||
|---|---|---|
template< class IntType = int > class geometric_distribution; | (с C++11) |
Производит случайные целочисленные значения i ≥ 0, распределённые согласно дискретной функции распределения вероятностей: \(P(i|p) = p \cdot (1-p)^i\)P(i|p) = p · (1 − p)
iЗначение представляет количество неудач в серии независимых испытаний «да/нет» (каждое испытание имеет вероятность успеха p), прежде чем произойдёт ровно 1 успех.
std::geometric_distribution<>(p) точно эквивалентно std::negative_binomial_distribution<>(1, p). Это также дискретный аналог std::exponential_distribution.
std::geometric_distribution удовлетворяет требованиям к генераторам случайных чисел.
Параметры шаблона
| IntType | - | Тип результата, генерируемый генератором. Результат не определён, если этот тип не является одним из short, int, long, long long, unsigned short, unsigned int, unsigned long, или unsigned long long. |
Типы-члены
| Тип-член | Определение |
|---|---|
result_type (C++11) | IntType |
param_type (C++11) | тип набора параметров, см. требования к генераторам случайных чисел. |
Члены-функции
|
(C++11) | создаёт новую распределённость (публичная функция-член) |
|
(C++11) | сбрасывает внутреннее состояние распределения (публичная функция-член) |
Генерация |
|
|
(C++11) | генерирует следующее случайное число в распределении (публичная функция-член) |
Характеристики |
|
|
(C++11) | возвращает параметр распределения p (вероятность того, что испытание даст true) (публичная функция-член) |
|
(C++11) | получает или задаёт объект параметра распределения (публичная функция-член) |
|
(C++11) | возвращает минимальное потенциально сгенерированное значение (публичная функция-член) |
|
(C++11) | возвращает максимальное потенциально сгенерированное значение (публичная функция-член) |
Функции вне класса
|
(C++11)(C++11)(удалено в C++20) | сравнивает два объекта распределения (функция) |
|
(C++11) | выполняет ввод и вывод в поток для распределения псевдослучайных чисел (шаблон функции) |
Пример
std::geometric_distribution<>(0.5) по умолчанию и представляет количество подбрасываний монеты, необходимых для получения «орла».
#include <iomanip>
#include <iostream>
#include <map>
#include <random>
#include <string>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::geometric_distribution<> d;
// same as
// std::negative_binomial_distribution<> d(1, 0.5):
std::map<int, int> hist;
for (int n = 0; n != 10000; ++n)
++hist[d(gen)];
for (auto [x, y] : hist)
{
const char c = x < 10 ? x + '0' : x - 10 + 'a';
std::cout << c << ' ' << std::string(y / 100, '*') << '\n';
}
}Возможный вывод:
0 ************************************************* 1 ************************* 2 ************ 3 ****** 4 ** 5 * 6 7 8 9
Внешние ссылки
| Weisstein, Eric W. «Геометрическое распределение». Из MathWorld — Wolfram Web Resource. |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/random/geometric_distribution