Namespaces
Variants

std:: geometric_distribution

From cppreference.net
Определено в заголовке <random>
template < class IntType = int >
class geometric_distribution ;
(начиная с C++11)

Генерирует случайные неотрицательные целочисленные значения i , распределенные в соответствии с дискретной функцией вероятности:

P(i|p) = p · (1 − p) i

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

std :: geometric_distribution <> ( p ) точно эквивалентно std:: negative_binomial_distribution <> ( 1 , p ) . Также является дискретным аналогом std::exponential_distribution .

std::geometric_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 .

Функции-члены

создает новое распределение
(public member function)
(C++11)
сбрасывает внутреннее состояние распределения
(public member function)
Генерация
(C++11)
генерирует следующее случайное число в распределении
(public member function)
Характеристики
(C++11)
возвращает параметр распределения p (вероятность того, что испытание сгенерирует true )
(public member function)
(C++11)
получает или устанавливает объект параметров распределения
(public member function)
(C++11)
возвращает минимальное потенциально генерируемое значение
(public member function)
(C++11)
возвращает максимальное потенциально генерируемое значение
(public member function)

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

(C++11) (C++11) (removed in C++20)
сравнивает два объекта распределения
(функция)
выполняет потоковый ввод и вывод для распределения псевдослучайных чисел
(шаблон функции)

Пример

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

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

Вайсштейн, Эрик В. "Геометрическое распределение." Из MathWorld — веб-ресурс Wolfram.