Ескерім
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Создает высококачественную последовательность случайных целых чисел на основе алгоритма "Вихрь Мерсенна".
Синтаксис
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