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