std:: mersenne_twister_engine
|
Определено в заголовке
<random>
|
||
|
template
<
class
UIntType,
std::
size_t
w,
std::
size_t
n,
std::
size_t
m,
std::
size_t
r,
|
(начиная с 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 :
-
- w >= 3
- w >= r
- w >= u
- w >= s
- w >= t
- w >= l
- w <= std:: numeric_limits < UIntType > :: digits
- Дано ( 1u << w ) - 1u как w1 , следующие выражения являются true :
-
- a <= w1
- b <= w1
- c <= w1
- d <= w1
- f <= w1
Свойства генератора
Размер
состояния
для
mersenne_twister_engine
составляет
n
, каждое из которых состоит из последовательности
X
из
n
значений типа
result_type
.
X
j
обозначает
j mod n
-ое значение (начиная с 0) в
X
.
Даны следующие обозначения побитовых операций:
- bitand , встроенный побитовый AND .
- xor , встроенный побитовый XOR .
- lshift , встроенный побитовый сдвиг влево .
- rshift , встроенный побитовый сдвиг вправо .
Алгоритм перехода
для
mersenne_twister_engine
(
TA(x
i
)
) определяется следующим образом:
- Объедините старшие w - r битов X i-n с младшими r битами X i+1-n для получения беззнакового целого значения Y .
- Пусть y равно a·(Y bitand 1) , и установите X i в значение X i+m−n xor (Y rshift 1) xor y .
Алгоритм
генерации
для
mersenne_twister_engine
(
GA(x
i
)
) определяется следующим образом:
- Пусть z 1 будет X i xor ((X i rshift u) bitand d) .
-
Пусть
z
2
будет
X
i
xor (((X
i
lshift s) mod 2
w
) bitand b) . -
Пусть
z
3
будет
X
i
xor (((X
i
lshift t) mod 2
w
) bitand c) . - Пусть z 4 будет z 3 xor (z 3 rshift l) .
- Возвращается z 4 как результат (т.е. GA(x i )=z 4 ).
Предопределенные специализации
Следующие специализации определяют генератор случайных чисел с двумя часто используемыми наборами параметров:
|
Определено в заголовке
<random>
|
|
| Тип | Определение |
mt19937
(C++11)
|
std
::
mersenne_twister_engine
<
std::
uint_fast32_t
,
|
mt19937_64
(C++11)
|
std
::
mersenne_twister_engine
<
std::
uint_fast64_t
,
|
Вложенные типы
| Тип | Определение |
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)
|
сравнивает внутренние состояния двух генераторов псевдослучайных чисел
(функция) |
|
(C++11)
|
выполняет потоковый ввод и вывод для генератора псевдослучайных чисел
(шаблон функции) |
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |