Класс subtract_with_carry_engine
Создает случайную последовательность, используя алгоритм вычитания с переносом (метод Фибоначчи с запаздываниями).
Синтаксис
template <class UIntType, size_t W, size_t S, size_t R>
class subtract_with_carry_engine;
Параметры
UIntType
Беззнаковый целочисленный тип результата. Сведения о возможных типах см <. в случайном> порядке.
W
Размер слова. Размер каждого слова последовательности состояния в битах. Предварительные условия: 0 < W ≤ numeric_limits<UIntType>::digits
S
Короткая задержка. Количество целочисленных значений. Предварительные условия: 0 < S < R
R
Длинная задержка. Определяет повторения в созданном ряду.
Участники
subtract_with_carry_engine::subtract_with_carry_engine
subtract_with_carry_engine::max
subtract_with_carry_engine::min
subtract_with_carry_engine::discard
subtract_with_carry_engine::operator()
subtract_with_carry_engine::seed
default_seed
— это член-константа, определенный как 19780503u
и используемый как значение по умолчанию для параметра subtract_with_carry_engine::seed
и конструктор с одним значением.
Дополнительные сведения о членах подсистемы см. в случайном <>порядке.
Замечания
Шаблон substract_with_carry_engine
класса является улучшением linear_congruential_engine. Ни один из этих механизмов не обеспечивает такую же скорость и качество результатов, как механизм mersenne_twister_engine.
Этот механизм создает значения указанного пользователем целочисленного целочисленного типа, используя отношение повторения (период), где имеет значение1
, если x(i - S) - x(i - R) - cy(i - 1) < 0
, в противном случае 0
и M
имеет значение 2
W.cy(i)
x(i) = (x(i - R) - x(i - S) - cy(i - 1)) mod M
Состояние подсистемы — это индикатор переноса, а также значения R. Эти значения состоят из последних возвращаемых значений R , если operator()
был вызван по крайней мере раз R , в противном случае N
возвращаемые значения и последние R - N
значения начального значения.
Аргумент шаблона UIntType
должен быть достаточно большим, чтобы хранить значения до M - 1
.
Хотя можно создать генератор на основе этого механизма напрямую, также можно использовать одно из этих предварительно заданных определений типов:
ranlux24_base
: используется в качестве основания для ranlux24
.
typedef subtract_with_carry_engine<unsigned int, 24, 10, 24> ranlux24_base;
ranlux48_base
: используется в качестве основания для ranlux48
.
typedef subtract_with_carry_engine<unsigned long long, 48, 5, 12> ranlux48_base;
Подробные сведения о вычитаниях с алгоритмом двигателя переноски см. в статье Википедии о генераторе Fibonacci.
Требования
Заголовок:<random>
Пространство имен: std