А.3.1. Распределение случайных чисел
За исключением распределения bernoulli_distribution
, всегда генерирующего логические значения, типы распределений являются шаблонами. Каждый из этих шаблонов получает один параметр типа, задающий тип генерируемого распределением результата.
Классы распределений отличаются от других использованных ранее шаблонов класса, поскольку типы распределения налагают ограничения на пригодные для использования типы. Некоторые шаблоны распределения применяются для генерации только чисел с плавающей запятой; другие применяются для генерации только целых чисел.
В описаниях ниже для указания типа генерируемых шаблоном распределения чисел, например с плавающей запятой, используется формат имя_шаблона<RealT>
. Для таких шаблонов вместо RealT
можно использовать типы float
, double
или long double
. Точно так же вместо IntT
можно использовать любой из встроенных целочисленных типов (short
, int
, long
, long long
, unsigned short
, unsigned int
, unsigned long
или unsigned long long
), но не тип bool
или char
.
Шаблоны распределения определяют заданный по умолчанию параметр типа шаблона (см. раздел 17.4.2). Для целочисленных распределений по умолчанию принят тип int
; для распределений, генерирующих числа с плавающей запятой, — тип double
.
Конструкторы каждого вида распределения имеют специфические параметры. Некоторые из этих параметров определяют диапазон распределения. В отличие от диапазонов итераторов, эти диапазоны всегда являются инклюзивными (включающими крайние значения).
uniform_int_distribution<IntT> u(m, n);
uniform_real_distribution<RealT> u(x, y);
Генерирует значения указанного типа в заданном инклюзивном диапазоне. Параметры m
(или x
) задают наименьшее число, которое может быть возвращено; а параметры n
(или y
) — наибольшее. По умолчанию m
имеет значение 0, a n
— максимально возможное значение, которое способен хранить объект типа intT
. Параметр x
по умолчанию имеет значение 0.0, а y
— 1.0.
bernoulli_distribution b(p);
Возвращает значение true
с вероятностью, заданной параметром p
. По умолчанию параметр p
имеет значение 0.5.
binomial_distribution<IntT> b(t, p);
Распределение вычисляется для выборочного размера, заданного целочисленным значением t
, с вероятностью p
; по умолчанию t
имеет значение 1, а p
— значение 0.5.
geometric_distribution<IntT> g(p);
Параметр p
задает вероятность возвращения значения true
и по умолчанию имеет значение 0.5.
negative_binomial_distribution<IntT> nb(k, p);
Целочисленное значение k
приближается к решению с вероятностью успеха p
. По умолчанию k
имеет значение 1, а p
— значение 0.5.
poisson_distribution<IntT> p(х);
Распределение относительно значения x
типа double
.
exponential_distribution<RealT> e(lam);
Лямбда lam
— значение с плавающей точкой; по умолчанию lam
имеет значение 1.0.
gamma_distribution<RealT> g(a, b);
Альфа (форма) a
и бета (масштаб) b
; оба по умолчанию имеют значение 1.0.
weibull_distribution<RealT> w(a, b);
Форма a
и масштаб b
; оба по умолчанию имеют значение 1.0.
extreme_value_distribution<RealT> е(а, b);
По умолчанию а имеет значение 0.0, a b — значение 1.0.
normal_distribution<RealT> n(m, s);
Параметр m
— это математическое ожидание, a s
— среднеквадратичное отклонение. По умолчанию m
имеет значение 0.0, a s
— значение 1.0.
lognormal_distribution<RealT> ln(m, s);
Параметр m
— это математическое ожидание, a s
— среднеквадратичное отклонение. По умолчанию m
имеет значение 0.0, a s
— значение 1.0.
chi_squared_distribution<RealT> c(x);
Параметр x
— это степень свободы; по умолчанию имеет значение 1.0.