Выбрать главу

А.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.