Язык программирования C++. Пятое издание - Стенли Липпман
Шрифт:
Интервал:
Закладка:
adjacent_difference(beg, end, dest)
adjacent_difference(beg, end, dest, binaryOp)
Пишет в dest новую последовательность, каждое значение элемента которой, кроме первого, представляет собой разницу между текущими и предыдущим элементами. Первая версия использует оператор - тип элемента, а вторая применяет заданный бинарный оператор.
iota(beg, end, val)
Присваивает val первому элементу и осуществляет приращение val. Присваивает приращенное значение следующему элементу и снова осуществляет приращение val, а затем присваивает приращенное значение следующему элементу последовательности. Продолжает приращение val и присваивает новое значение последующему элементу в исходной последовательности.
A.3. Случайные числа
Библиотека определяет набор классов процессоров случайных чисел и адаптеров, использующих различные математические подходы для генерации псевдослучайных чисел. Библиотека определяет также набор шаблонов распределений, обеспечивающих распределение чисел согласно различным вероятностям. Имена классов процессоров и распределений соответствуют их математическим свойствам.
Подробности генерации чисел этими классами не рассматриваются в данном издании. Здесь перечислены типы процессоров и распределений, но чтобы лучше узнать, как их использовать, следует обратиться к другим ресурсам.
А.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.
cauchy_distribution<RealT> c(a, b);
Область а по умолчанию имеет значение 0.0, а масштаб b — значение 1.0.
fisher_f_distribution<RealT> f(m, n);
m и n — степени свободы; оба по умолчанию имеют значения 1.
student_t_distribution<RealT> s(n);
n — степень свободы; значение по умолчанию — 1.
Выборочное распределениеdiscrete_distribution<IntT> d(i, j);
discrete_distribution<IntT> d{il};
i и j — итераторы ввода последовательности коэффициентов; il — заключенный в скобки список коэффициентов. Коэффициенты должны допускать приведение к типу double.
piecewise_constant_distribution<RealT> pc(b, е, w);
b, е и w — итераторы ввода.
piecewise_linear_distribution<RealT> pl(b, е, w);
b, е и w — итераторы ввода.
А.3.2. Процессоры случайных чисел
Библиотека определяет три класса, реализующих различные алгоритмы генерации случайных чисел. Библиотека определяет также три адаптера, модифицирующих созданную последовательность заданным процессором. Классы процессоров и адаптеров являются шаблонами. В отличие от параметров распределений, параметры процессоров сложны и требуют хорошего знания математического механизма, используемого конкретным процессором. Процессоры перечислены здесь только для того, чтобы читатель знал об их существовании, но подробно они в этой книге не рассматриваются.
Библиотека определяет также несколько типов, созданных на базе процессоров и адаптеров. Тип default_random_engine — это псевдоним типа для одного из классов процессоров, параметризованных переменными, предназначенными для повышения эффективности использования. Библиотека определяет также несколько классов, являющихся полностью специализированными версиями процессора или адаптера. Ниже приведены процессоры и их специализации, определенные библиотекой.
Тип default_random_engineПсевдоним типа для одного из процессоров, подходящего для большинства задач.
Тип linear_congruential_engineminstd_rand0 — имеет множитель 16807, модуль 2147483647 и приращение 0.
minstd_rand — имеет множитель 48271, модуль 2147483647 и приращение 0.
Тип mersenne_twister_enginemt19937 — 32-разрядный беззнаковый генератор вихря Мерсенна.
mt19937_64 — 64-разрядный беззнаковый генератор вихря Мерсенна.
Тип subtract_with_carry_engineranlux24_base — 32-разрядный беззнаковый генератор вычитания с переносом.
ranlux48_base — 64-разрядный беззнаковый генератор вычитания с переносом.
Тип discard_block_engineАдаптер процессора, отбрасывающий результаты базового процессора. Параметризуется базовым процессором для размера используемого блока и размера использованных блоков.
ranlux24 — использует процессор ranlux24_base с размером блока 223 и размером использованных блоков 23.
ranlux48 — использует процессор ranlux48_base с размером блока 389 и размером использованных блоков 11.
Тип independent_bits_engineАдаптер процессора, генерирующий числа с заданным количеством битов. Параметризован базовым процессором для использования количества битов, генерируемых в его результатах, и целочисленным беззнаковым типом, используемым для содержания созданных битов. Определяемое количество битов должно быть меньше количества цифр, которое может содержать заданный беззнаковый тип.