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) |
Является генератором псевдослучайных чисел, использующим алгоритм «вычитание с переносом».
Состояние subtract_with_carry_engine состоит из последовательности \(\small{\{ X_i\}(0 \le i <r)}\){Xi} (0 ≤ i <r), где каждое \(\small{X_i}\)Xi находится в интервале \(\small{[0, 2^w)}\)[0, 2w).
Пусть все индексы в последовательности берутся по модулю r, c — значение переноса, которое может быть либо 0, либо 1. Переход к следующему состоянию выполняется следующим образом:
- пусть \(\small{Y=X_{i-s}-X_{i-r}-c}\)Y=Xi-s-Xi-r-c,
- установите \(\small{X_i}\)Xi в \(\small{Y \mod 2^w}\)Y mod 2w,
- установите
cв1, если \(\small{Y<0}\)Y<0, и в0в противном случае.
Следующие определения типов задают генератор псевдослучайных чисел с двумя обычно используемыми наборами параметров:
Определено в заголовочном файле <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> |
Параметры шаблона
| UIntType | - | Тип результата, генерируемый генератором. Результат неопределён, если это не один из unsigned short, unsigned int, unsigned long, или unsigned long long. |
| w | - | Размер слова в битах последовательности состояния, 10 < w <= std::numeric_limits<UIntType>::digits. |
| s | - | Короткий сдвиг. |
| r | - | Длинный сдвиг, где 0 < s < r. |
Типы членов
| Тип члена | Определение |
|---|---|
result_type (C++11) | Целочисленный тип, генерируемый движком. Результаты неопределены, если это не беззнаковый целочисленный тип. |
Члены-функции
Конструктор и установка начального значения |
|
|
(C++11) | создаёт генератор (публичная функция-член) |
|
(C++11) | устанавливает текущее состояние генератора (публичная функция-член) |
Генерация |
|
|
(C++11) | продвигает состояние генератора и возвращает сгенерированное значение (публичная функция-член) |
|
(C++11) | продвигает состояние генератора на заданное количество шагов (публичная функция-член) |
Характеристики |
|
|
[static] (C++11) | возвращает наименьшее возможное значение в диапазоне вывода (публичная статическая функция-член) |
|
[static] (C++11) | возвращает наибольшее возможное значение в диапазоне вывода (публичная статическая функция-член) |
Функции вне класса
|
(C++11)(C++11)(удалено в C++20) | сравнивает внутренние состояния двух генераторов псевдослучайных чисел (функция) |
|
(C++11) | выполняет ввод/вывод в поток генератора псевдослучайных чисел (шаблон функции) |
Постоянные члены
| constexpr
std::size_t word_size[static] (C++11) | параметр шаблона w, размер слова (публичная статическая константа-член) |
| constexpr
std::size_t short_lag[static] (C++11) | параметр шаблона s, короткий сдвиг (публичная статическая константа-член) |
| constexpr
std::size_t long_lag[static] (C++11) | параметр шаблона r, длинный сдвиг (публичная статическая константа-член) |
| constexpr
std::uint_least32_t default_seed[static] (C++11) | константное значение 19780503u (публичная статическая константа-член) |
Пример
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/random/subtract_with_carry_engine