std::mersenne_twister_engine
Определено в заголовочном файле <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 на интервале \(\scriptsize {[0,2^w)}\)[0, 2w).
Следующие алиасы типов определяют генератор псевдослучайных чисел с двумя часто используемыми наборами параметров:
Определено в заголовочном файле <random> |
|
|---|---|
| Тип | Определение |
mt19937(C++11) |
|
mt19937_64(C++11) |
|
Параметры шаблона
| UIntType | - | Тип результата, генерируемого генератором. Если это не один из типов unsigned short, unsigned int, unsigned long, или unsigned long long, поведение не определено. |
| w | - | степень двойки, определяющая диапазон значений, генерируемых генератором |
| n | - | степень рекурсии |
| m | - | среднее слово, смещение, используемое в рекуррентном соотношении, определяющем ряд x, 1 ≤ m < n |
| r | - | число бит в нижней битовой маске, 0 ≤ r ≤ w-1, также известное как значение скручивания |
| a | - | условный XOR-маска, т.е. коэффициенты матрицы скручивания рациональной нормальной формы |
| u | - | 1-й компонент матрицы перемешивания бит (темперирования) |
| d | - | 2-й компонент матрицы перемешивания бит (темперирования) |
| s | - | 3-й компонент матрицы перемешивания бит (темперирования) |
| b | - | 4-й компонент матрицы перемешивания бит (темперирования) |
| t | - | 5-й компонент матрицы перемешивания бит (темперирования) |
| c | - | 6-й компонент матрицы перемешивания бит (темперирования) |
| l | - | 7-й компонент матрицы перемешивания бит (темперирования) |
| f | - | множитель инициализации |
Следующие соотношения должны выполняться:
-
0 < m ≤ n -
2 < w -
r ≤ w -
u ≤ w -
s ≤ w -
t ≤ w -
l ≤ w -
w ≤std::numeric_limits<UIntType>::digits -
a ≤ 2w-1 -
b ≤ 2w-1 -
c ≤ 2w-1 -
d ≤ 2w-1 -
f ≤ 2w-1
Типы членов
| Тип члена | Определение |
|---|---|
result_type (C++11) | Целочисленный тип, UIntType, генерируемый генератором. Результаты не определены, если это не целое без знака. |
Члены-функции
Конструктор и Инициализация |
|
|
(C++11) | конструктор генератора (публичная функция-член) |
|
(C++11) | задаёт текущее состояние генератора (публичная функция-член) |
Генерация |
|
|
(C++11) | переводит состояние генератора и возвращает сгенерированное значение (публичная функция-член) |
|
(C++11) | переводит состояние генератора на указанное количество шагов (публичная функция-член) |
Характеристики |
|
|
[статическая] (C++11) | получает наименьшее возможное значение в диапазоне выходных данных (публичная статическая функция-член) |
|
[статическая] (C++11) | получает наибольшее возможное значение в диапазоне выходных данных (публичная статическая функция-член) |
Функции вне класса
|
(C++11)(C++11)(удалено в C++20) | сравнивает внутренние состояния двух генераторов псевдослучайных чисел (функция) |
|
(C++11) | выполняет ввод и вывод в поток для генератора псевдослучайных чисел (шаблон функции) |
Константы членов
| constexpr size_t word_size
[static] (C++11) | параметр шаблона w, определяет диапазон значений, генерируемых генератором (общедоступная статическая константа) |
| constexpr size_t state_size
[static] (C++11) | параметр шаблона n. Состояние генератора состоит из n значений типа UIntType (общедоступная статическая константа) |
| constexpr size_t shift_size
[static] (C++11) | параметр шаблона m (общедоступная статическая константа) |
| constexpr size_t mask_bits
[static] (C++11) | параметр шаблона r, также известный как значение сдвига (общедоступная статическая константа) |
| constexpr UIntType xor_mask
[static] (C++11) | параметр шаблона a, условное битовое исключающее ИЛИ (общедоступная статическая константа) |
| constexpr size_t tempering_u
[static] (C++11) | параметр шаблона u, первый компонент матрицы битовых перестановок (затемления) (общедоступная статическая константа) |
| constexpr UIntType tempering_d
[static] (C++11) | параметр шаблона d, второй компонент матрицы битовых перестановок (затемления) (общедоступная статическая константа) |
| constexpr size_t tempering_s
[static] (C++11) | параметр шаблона s, третий компонент матрицы битовых перестановок (затемления) (общедоступная статическая константа) |
| constexpr UIntType tempering_b
[static] (C++11) | параметр шаблона b, четвёртый компонент матрицы битовых перестановок (затемления) (общедоступная статическая константа) |
| constexpr size_t tempering_t
[static] (C++11) | параметр шаблона t, пятый компонент матрицы битовых перестановок (затемления) (общедоступная статическая константа) |
| constexpr UIntType tempering_c
[static] (C++11) | параметр шаблона c, шестой компонент матрицы битовых перестановок (затемления) (общедоступная статическая константа) |
| constexpr size_t tempering_l
[static] (C++11) | параметр шаблона l, седьмой компонент матрицы битовых перестановок (затемления) (общедоступная статическая константа) |
| constexpr UIntType initialization_multiplier
[static] (C++11) | параметр шаблона f (общедоступная статическая константа) |
| constexpr UIntType default_seed
[static] (C++11) | константа 5489u (общедоступная статическая константа) |
Примечания
Требуется N-ое последовательное вызов генератора по умолчанию, чтобы получить следующее значение:
N | Тип генератора случайных чисел | Значение для вывода |
|---|---|---|
10000 |
std::mt19937 | 4123659995 |
10000 |
std::mt19937_64 | 9981545732273789042 |
Это гарантирует, что генератор случайных чисел соответствует стандарту (см. N1398).
#include <cassert>
#include <random>
int main()
{
std::mt19937 gen32;
std::mt19937_64 gen64;
gen32.discard(10'000 - 1);
gen64.discard(10'000 - 1);
assert(gen32() == 4'123'659'995);
assert(gen64() == 9'981'545'732'273'789'042ull);
}
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine