Namespaces
Variants

std:: mersenne_twister_engine

From cppreference.net
Определено в заголовке <random>
template <

class UIntType, std:: size_t w, std:: size_t n, std:: size_t m, std:: size_t r,
UIntType a, std:: size_t u, UIntType d, std:: size_t s,
UIntType b, std:: size_t t, UIntType c, std:: size_t l, UIntType f

> class mersenne_twister_engine ;
(начиная с C++11)

mersenne_twister_engine — это генератор случайных чисел, основанный на алгоритме Mersenne Twister . Он производит высококачественные, но не криптографически стойкие, беззнаковые целочисленные случайные числа типа UIntType в интервале [0, 2 w
)
.

Содержание

Параметры шаблона

UIntType - Тип результата, генерируемый генератором. Поведение не определено, если это не один из unsigned short , unsigned int , unsigned long , или unsigned long long .
w - степень двойки, определяющая диапазон значений, генерируемых движком
n - степень рекуррентности
m - среднее слово, смещение, используемое в рекуррентном соотношении, определяющем состояние
r - количество бит нижней битовой маски, также известное как значение твиста
a - условная маска XOR, т.е. коэффициенты матрицы твиста в рациональной нормальной форме
u, d, s, b, t, c, l - 1-й й - 7-й й компоненты матрицы скремблирования бит (темперирования)
f - множитель инициализации

Если нарушено любое из следующих ограничений, программа является некорректной:

  • m находится в [ 1 , n ] .
  • Следующие выражения все true :
  • Дано ( 1u << w ) - 1u как w1 , следующие выражения являются true :
  • a <= w1
  • b <= w1
  • c <= w1
  • d <= w1
  • f <= w1
**Примечание:** Весь текст в данном фрагменте находится внутри тегов ` `, которые обозначают код на C++. Согласно вашим инструкциям, содержимое внутри таких тегов не подлежит переводу, так как содержит C++ специфические термины и синтаксис. Поэтому исходный текст сохранен без изменений.

Свойства генератора

Размер состояния для mersenne_twister_engine составляет n , каждое из которых состоит из последовательности X из n значений типа result_type . X j обозначает j mod n -ое значение (начиная с 0) в X .

Даны следующие обозначения побитовых операций:

Алгоритм перехода для mersenne_twister_engine ( TA(x i ) ) определяется следующим образом:

  1. Объедините старшие w - r битов X i-n с младшими r битами X i+1-n для получения беззнакового целого значения Y .
  2. Пусть y равно a·(Y bitand 1) , и установите X i в значение X i+m−n xor (Y rshift 1) xor y .

Алгоритм генерации для mersenne_twister_engine ( GA(x i ) ) определяется следующим образом:

  1. Пусть z 1 будет X i xor ((X i rshift u) bitand d) .
  2. Пусть z 2 будет X i xor (((X i lshift s) mod 2 w
    ) bitand b)
    .
  3. Пусть z 3 будет X i xor (((X i lshift t) mod 2 w
    ) bitand c)
    .
  4. Пусть z 4 будет z 3 xor (z 3 rshift l) .
  5. Возвращается z 4 как результат (т.е. GA(x i )=z 4 ).

Предопределенные специализации

Следующие специализации определяют генератор случайных чисел с двумя часто используемыми наборами параметров:

Определено в заголовке <random>
Тип Определение
mt19937 (C++11)

std :: mersenne_twister_engine < std:: uint_fast32_t ,
32 , 624 , 397 , 31 ,
0x9908b0df , 11 ,
0xffffffff , 7 ,
0x9d2c5680 , 15 ,
0xefc60000 , 18 , 1812433253 >
32-битный вихрь Мерсенна от Мацумото и Нисимуры, 1998

mt19937_64 (C++11)

std :: mersenne_twister_engine < std:: uint_fast64_t ,
64 , 312 , 156 , 31 ,
0xb5026f5aa96619e9 , 29 ,
0x5555555555555555 , 17 ,
0x71d67fffeda60000 , 37 ,
0xfff7eee000000000 , 43 ,
6364136223846793005 >
64-битный вихрь Мерсенна от Мацумото и Нисимуры, 2000

Вложенные типы

Тип Определение
result_type UIntType

Члены данных

constexpr size_t word_size
[static]
w
(публичная статическая константа-член)
constexpr size_t state_size
[static]
n
(публичная статическая константа-член)
constexpr size_t shift_size
[static]
m
(публичная статическая константа-член)
constexpr size_t mask_bits
[static]
r
(публичная статическая константа-член)
constexpr UIntType xor_mask
[static]
a
(публичная статическая константа-член)
constexpr size_t tempering_u
[static]
u
(публичная статическая константа-член)
constexpr UIntType tempering_d
[static]
d
(публичная статическая константа-член)
constexpr size_t tempering_s
[static]
s
(публичная статическая константа-член)
constexpr UIntType tempering_b
[static]
b
(публичная статическая константа-член)
constexpr size_t tempering_t
[static]
t
(публичная статическая константа-член)
constexpr UIntType tempering_c
[static]
c
(публичная статическая константа-член)
constexpr size_t tempering_l
[static]
l
(публичная статическая константа-член)
constexpr UIntType initialization_multiplier
[static]
f
(публичная статическая константа-член)
constexpr UIntType default_seed
[static]
5489u
(публичная статическая константа-член)

Функции-члены

Конструкция и инициализация
конструирует движок
(public member function)
устанавливает текущее состояние движка
(public member function)
Генерация
продвигает состояние движка и возвращает сгенерированное значение
(public member function)
продвигает состояние движка на указанное количество шагов
(public member function)
Характеристики
[static]
получает наименьшее возможное значение в выходном диапазоне
(public static member function)
[static]
получает наибольшее возможное значение в выходном диапазоне
(public static member function)

Функции, не являющиеся членами класса

(C++11) (C++11) (removed in C++20)
сравнивает внутренние состояния двух генераторов псевдослучайных чисел
(функция)
выполняет потоковый ввод и вывод для генератора псевдослучайных чисел
(шаблон функции)

Пример