Класс 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 имеет значение 2W.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.

Requirements

Заголовок:<random>

Пространство имен: std

См. также

<random>