Spec-Zone.ru › C++

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)) определяется следующим образом:

  1. Положить Y равным \(\scriptsize X_{i-s}-X_{i-r}-c\)Xi-s-Xi-r-c.
  2. Положить y равным \(\scriptsize Y\mod 2^w\)Y mod 2w, а y присвоить значение \(\scriptsize X_i\)Xi.
  3. Если 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
(открытая статическая константа-член)

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

Создание и инициализация
(конструктор)
создаёт генератор
(открытая функция-член)
seed
задаёт текущее состояние генератора
(открытая функция-член)
Генерация
operator()
продвигает состояние генератора и возвращает сгенерированное значение
(открытая функция-член)
discard
продвигает состояние генератора на заданное количество шагов
(открытая функция-член)
Характеристики
min
[статический]
возвращает наименьшее возможное значение в диапазоне вывода
(открытая статическая функция-член)
max
[статический]
возвращает наибольшее возможное значение в диапазоне вывода
(открытая статическая функция-член)

Функции вне класса

operator==operator!=
(C++11)(C++11)(удалён в C++20)
сравнивает внутренние состояния двух генераторов псевдослучайных чисел
(функция)
operator<<operator>>
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API