Класс mersenne_twister_engine
Создает высококачественную последовательность случайных целых чисел на основе алгоритма "Вихрь Мерсенна".
template<class UIntType, size_t W, size_t N, size_t M, size_t R, UIntType A, size_t U, UIntType D, size_t S, UIntType B, size_t T, UIntType C, size_t L, UIntType F> class mersenne_twister_engine;
Параметры
UIntType
Беззнаковый целочисленный тип результата. Возможные типы см. в разделе <random>.W
Размер слова. Размер каждого слова последовательности состояния в битах. Предусловие: 2u < W ≤ numeric_limits<UIntType>::digitsN
Размер состояния. Количество элементов (значений) в последовательности состояний.M
Размер сдвига. Число элементов, которые пропускаются при каждом повороте. Предусловие: 0 < M ≤ NR
Биты маски. Предусловие: R ≤ WA
Маска XOR. Предусловие: A ≤ (1u<<W) - 1uU, S, T, L
Параметры сдвига при смешивании. Используются как значения сдвига во время шифрования (смешивания). Предусловие: U,S,T,L ≤ WD, B, C
Параметры битовой маски смешивания. Используются как значения битовой маски во время шифрования (смешивания). Предусловие: D,B,C ≤ (1u<<W) - 1uF
Множитель инициализации. Используется для инициализации последовательности. Предусловие: F ≤ (1u<<W) - 1u
Члены
mersenne_twister_engine::mersenne_twister_engine |
mersenne_twister_engine::min |
mersenne_twister_engine::discard |
mersenne_twister_engine::operator() |
mersenne_twister_engine::max |
mersenne_twister_engine::seed |
default_seed — это член-константа, определенный как 5489u и используемый как значение по умолчанию для параметра mersenne_twister_engine::seed и конструктор с одним значением. |
Дополнительные сведения о членах механизма см. в разделе <random>.
Заметки
Этот класс шаблона описывает механизм случайных чисел, который возвращает значения в замкнутом интервале [0, 2W - 1]. Он содержит большое W * (N - 1) + R-разрядное целое значение. Класс извлекает W разрядов из этого значения. Когда использованы все разряды, большое значение перемешивается за счет сдвига и смешивания разрядов для получения нового набора разрядов. Состояние механизма — это N последних W-разрядных значений, если функция operator() вызывалась минимум N раз. В противном случае — M W-разрядных значений и N - M последних значений начального значения.
Генератор перемешивает большое значение, используя генерализованный регистр сдвига, заданный значениями сдвига N и M, значением поворота R и условной XOR-маской A. Кроме того, разряды регистра сдвига шифруются в соответствии с матрицей, заданной значениями U, D, S, B, T, C и L.
Аргумент шаблона UIntType должен быть достаточно большим, чтобы хранить значения до 2W - 1. Значения других аргументов шаблона должны удовлетворять следующим требованиям: 2u < W, 0 < M, M ≤ N, R ≤ W, U ≤ W, S ≤ W, T ≤ W, L ≤ W, W ≤ numeric_limits<UIntType>::digits, A ≤ (1u<<W) - 1u, B ≤ (1u<<W) - 1u, C ≤ (1u<<W) - 1u, D ≤ (1u<<W) - 1u, and F ≤ (1u<<W) - 1u.
Хотя можно создать генератор на основе этого механизма напрямую, рекомендуется использовать один из предварительно заданных определений типов, показанных в следующей таблице.
Имя |
Описание |
---|---|
mt19937 |
32-разрядный механизм типа "Вихрь Мерсенна" (Матсумото и Нишимура, 1998).
|
mt19937_64 |
64-разрядный механизм типа "Вихрь Мерсенна" (Матсумото и Нишимура, 2000).
|
Дополнительные сведения об алгоритме "Вихрь Мерсенна" см. в статье Вихрь Мерсенна на веб-сайте Википедии.
Пример
Пример кода см. в разделе <random>.
Требования
Заголовок: <random>
Пространство имен: std