std::subtract_with_carry_engine
Определён в заголовке <random> | ||
|---|---|---|
template<
class UIntType,
std::size_t w, std::size_t s, std::size_t r
> class subtract_with_carry_engine;
| (начиная с C++11) |
Представляет собой генератор случайных чисел, использующий алгоритм вычитания с переносом.
Параметры шаблона
| UIntType | - | Тип результата, генерируемого генератором. Поведение не определено, если это не один из типов unsignedshort, unsignedint, unsignedlong или unsignedlonglong. |
| w | - | размер слова в битах для последовательности состояний |
| s | - | короткий лаг |
| r | - | длинный лаг |
Если w не входит в [1, std::numeric_limits<UIntType>::digits] или s не входит в [1, r), программа некорректна.
Свойства генератора
Размер состояний subtract_with_carry_engine равен \(\scriptsize O(r)\)O(r); каждое из них состоит из двух частей:
- Последовательность
Xизrцелочисленных значений, каждое из которых принадлежит[0,2w). - Целое число
c(так называемый перенос ), значение которого равно0или1.
Пусть \(\scriptsize X_j\)Xj обозначает значение X с индексом \(\scriptsize j\mod r\)j mod r (отсчёт начинается с 0). Тогда алгоритм перехода subtract_with_carry_engine (\(\scriptsize TA(x_i)\)TA(xi)) определяется следующим образом:
- Положить
Yравным \(\scriptsize X_{i-s}-X_{i-r}-c\)Xi-s-Xi-r-c. - Положить
yравным \(\scriptsize Y\mod 2^w\)Y mod 2w, аyприсвоить значение \(\scriptsize X_i\)Xi. - Если
Yотрицательно, присвоитьcзначение1, иначе присвоитьcзначение0.
Алгоритм генерации subtract_with_carry_engine — это \(\scriptsize GA(x_i) = y\)GA(xi) = y, где y — значение, полученное на шаге 2 алгоритма перехода.
Предопределённые специализации
Следующие специализации задают генератор случайных чисел с двумя часто используемыми наборами параметров:
Определены в заголовке <random> |
|
|---|---|
| Тип | Определение |
ranlux24_base (C++11) | std::subtract_with_carry_engine<std::uint_fast32_t,24,10,24> |
ranlux48_base (C++11) | std::subtract_with_carry_engine<std::uint_fast64_t,48,5,12> |
Вложенные типы
| Тип | Определение |
|---|---|
result_type |
UIntType |
Данные-члены
|
constexpr
std::size_t word_size[статический] |
w (открытая статическая константа-член) |
|
constexpr
std::size_t short_lag[статический] |
s (открытая статическая константа-член) |
|
constexpr
std::size_t long_lag[статический] |
r (открытая статическая константа-член) |
|
constexpr
std::uint_least32_t default_seed[статический] |
19780503u (открытая статическая константа-член) |
Функции-члены
Создание и инициализация |
|
| создаёт генератор (открытая функция-член) |
|
| задаёт текущее состояние генератора (открытая функция-член) |
|
Генерация |
|
| продвигает состояние генератора и возвращает сгенерированное значение (открытая функция-член) |
|
| продвигает состояние генератора на заданное количество шагов (открытая функция-член) |
|
Характеристики |
|
|
[статический] | возвращает наименьшее возможное значение в диапазоне вывода (открытая статическая функция-член) |
|
[статический] | возвращает наибольшее возможное значение в диапазоне вывода (открытая статическая функция-член) |
Функции вне класса
|
(C++11)(C++11)(удалён в C++20) | сравнивает внутренние состояния двух генераторов псевдослучайных чисел (функция) |
|
(C++11) | выполняет потоковый ввод и вывод генератора псевдослучайных чисел (шаблон функции) |
Пример
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Применён к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 3809 | C++11 |
default_seed могло бытьне представимо с result_type | его тип изменён наstd::uint_least32_t |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/random/subtract_with_carry_engine