Namespaces
Variants

std:: subtract_with_carry_engine

From cppreference.net
Определено в заголовочном файле <random>
template <

class UIntType,
std:: size_t w, std:: size_t s, std:: size_t r

> class subtract_with_carry_engine ;
(начиная с C++11)

Это генератор случайных чисел, использующий алгоритм subtract with carry .

Содержание

Параметры шаблона

UIntType - Тип результата, генерируемый генератором. Поведение не определено, если это не один из unsigned short , unsigned int , unsigned long , или unsigned long long .
w - размер слова в битах для последовательности состояний
s - короткий лаг
r - длинный лаг

Если w не находится в диапазоне [ 1 , std:: numeric_limits < UIntType > :: digits ] , или s не находится в диапазоне [ 1 , r ) , программа является некорректной.

Свойства генератора

Размер состояний subtract_with_carry_engine составляет O(r) , каждое из них состоит из двух частей:

  • Последовательность X из r целочисленных значений, где каждое значение находится в диапазоне [ 0 , 2 w
    )
    .
  • Целое число c (известное как перенос ), значение которого равно либо 0 , либо 1 .

Учитывая, что X j обозначает j mod r -е значение (начиная с 0) переменной X , алгоритм перехода для subtract_with_carry_engine ( TA(x i ) ) определяется следующим образом:

  1. Пусть Y будет X i-s -X i-r -c .
  2. Пусть y будет Y mod 2 w
    , и установи X i в y .
  3. Если Y отрицательно, установи c в 1 , иначе установи c в 0 .

Алгоритм генерации для subtract_with_carry_engine представляет собой GA(x i ) = 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
[static]
w
(публичная статическая константа-член)
constexpr std::size_t short_lag
[static]
s
(публичная статическая константа-член)
constexpr std::size_t long_lag
[static]
r
(публичная статическая константа-член)
constexpr std::uint_least32_t default_seed
[static]
19780503u
(публичная статическая константа-член)

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

Конструкция и инициализация
конструирует движок
(public member function)
устанавливает текущее состояние движка
(public member function)
Генерация
продвигает состояние движка и возвращает сгенерированное значение
(public member function)
продвигает состояние движка на указанное количество шагов
(public member function)
Характеристики
[static]
получает наименьшее возможное значение в выходном диапазоне
(public static member function)
[static]
получает наибольшее возможное значение в выходном диапазоне
(public static member function)

Функции, не являющиеся членами класса

(C++11) (C++11) (removed in C++20)
сравнивает внутренние состояния двух генераторов псевдослучайных чисел
(функция)
выполняет потоковый ввод и вывод для генератора псевдослучайных чисел
(шаблон функции)

Пример

Отчеты о дефектах

Следующие отчеты об изменениях в поведении, являющиеся дефектными, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 3809 C++11 default_seed might not be
representable with result_type
changed its type to
std::uint_least32_t