Класс 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
Беззнаковый целочисленный тип результата. Сведения о возможных типах см <. в случайном> порядке.
W
Размер слова. Размер каждого слова последовательности состояния в битах. Предварительные условия: 2u < W ≤ numeric_limits<UIntType>::digits
N
Размер состояния. Количество элементов (значений) в последовательности состояний.
M
Размер сдвига. Число элементов, которые пропускаются при каждом повороте. Предварительные условия: 0 < M ≤ N
R
Биты маски. Предварительные условия: R ≤ W
Объект
Маска XOR. Предварительные условия: A ≤ (1u<<W) - 1u
U, S, T, L
Параметры сдвига при смешивании. Используются как значения сдвига во время шифрования (смешивания). Предусловие: U,S,T,L ≤ W
D, B, C
Параметры битовой маски смешивания. Используются как значения битовой маски во время шифрования (смешивания). Предусловие: D,B,C ≤ (1u<<W) - 1u
F
Множитель инициализации. Используется для инициализации последовательности. Предусловие: F ≤ (1u<<W) - 1u
Участники
mersenne_twister_engine::mersenne_twister_engine
mersenne_twister_engine::discard
mersenne_twister_engine::max
mersenne_twister_engine::min
mersenne_twister_engine::operator()
mersenne_twister_engine::seed
default_seed
— это член-константа, определенный как 5489u
и используемый как значение по умолчанию для параметра mersenne_twister_engine::seed
и конструктор с одним значением.
Дополнительные сведения о членах подсистемы см. в случайном <>порядке.
Замечания
Этот шаблон класса описывает подсистему случайных чисел, возвращая значения в закрытом интервале [ 0
, 2
W - 1
]. Он содержит большое W * (N - 1) + R
-разрядное целое значение. Он извлекает биты W за раз из этого большого значения, и когда он использовал все биты, которые он крутит большое значение путем перемещения и смешивания битов, чтобы он получил новый набор битов для извлечения из. Состояние подсистемы — это последние N
W
битовые значения, используемые, если operator()
были вызваны по крайней мере N раз, в противном случае W
M
используются битовые значения и последние N - M
значения начального значения.
Генератор крутит большое значение, которое он содержит с помощью крученного обобщенного регистра обратной связи, определенного значениями shift N и M, значением поворота R и условным XOR-mask A. Кроме того, биты необработанного регистра сдвигов скреблируются (закалываются) в соответствии с битовой матрицей, определенной значениями U, D, S, B, T, C и L.
Аргумент шаблона UIntType
должен быть достаточно большим, чтобы хранить значения до 2
W - 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).
typedef mersenne_twister_engine<unsigned int, 32, 624, 397,
31, 0x9908b0df,
11, 0xffffffff,
7, 0x9d2c5680,
15, 0xefc60000,
18, 1812433253> mt19937;
mt19937_64
: 64-разрядный механизм типа "Вихрь Мерсенна" (Матсумото и Нишимура, 2000).
typedef mersenne_twister_engine<unsigned long long, 64, 312, 156,
31, 0xb5026f5aa96619e9ULL,
29, 0x5555555555555555ULL,
17, 0x71d67fffeda60000ULL,
37, 0xfff7eee000000000ULL,
43, 6364136223846793005ULL> mt19937_64;
Дополнительные сведения об алгоритме "Вихрь Мерсенна" см. в статье Википедии Вихрь Мерсенна.
Пример
Пример кода см <. в случайном> порядке.
Требования
Заголовок:<random>
Пространство имен: std