Поделиться через


Класс 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>::digits

  • S
    Короткая задержка. Количество целочисленных значений. Предусловие: 0 < S < R

  • R
    Длинная задержка. Определяет повторения в созданном ряду.

Члены

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.

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;

Дополнительные сведения об алгоритме вычитания с переносом см. в статье Генератор Фибоначчи с запаздываниями на веб-сайте Википедии.

Требования

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

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

См. также

Ссылки

<random>