std::mersenne_twister_engine
Defined in header <random>
|
||
template< class UIntType, std::size_t w, std::size_t n, std::size_t m, std::size_t r, |
(since C++11) | |
mersenne_twister_engine
is a random number engine based on Mersenne Twister algorithm. It produces high quality, but not cryptographically secure, unsigned integer random numbers of type UIntType
on the interval [0, 2w).
Contents |
[edit] Template parameters
UIntType | - | The result type generated by the generator. The effect is undefined if this is not one of unsigned short, unsigned int, unsigned long, or unsigned long long. |
w | - | the power of two that determines the range of values generated by the engine |
n | - | the degree of recurrence |
m | - | the middle word, an offset used in the recurrence relation defining the state |
r | - | the number of bits of the lower bit-mask, also known as the twist value |
a | - | the conditional xor-mask, i.e. the coefficients of the rational normal form twist matrix |
u, d, s, b, t, c, l | - | the 1st to 7th components of the bit-scrambling (tempering) matrix |
f | - | the initialization multiplier |
If any of the following restrictions is violated, the program is ill-formed:
- m is in
[
1,
n]
. - The following expressions are all true:
- w >= 3
- w >= r
- w >= u
- w >= s
- w >= t
- w >= l
- w <= std::numeric_limits<UIntType>::digits
- Given (1u << w) - 1u as w1, the following expressions are all true:
- a <= w1
- b <= w1
- c <= w1
- d <= w1
- f <= w1
[edit] Generator properties
The size of the states of mersenne_twister_engine
is n, each of them consists of a sequence X of n values of type result_type
. Xj stands for the j mod nth value (starting from 0) of X.
Given the following bitwise operation notations:
- bitand, built-in bitwise AND.
- xor, built-in bitwise XOR.
- lshift, built-in bitwise left-shift.
- rshift, built-in bitwise right-shift.
The transition algorithm of mersenne_twister_engine
(TA(xi)) is defined as follows:
- Concatenate the upper w - r bits of Xi-n with the lower r bits of Xi+1-n to obtain an unsigned integer value Y.
- Let y be a·(Y bitand 1), and set Xi to Xi+m−n xor (Y rshift 1) xor y.
The generation algorithm of mersenne_twister_engine
(GA(xi)) is defined as follows:
- Let z1 be Xi xor ((Xi rshift u) bitand d).
- Let z2 be Xi xor (((Xi lshift s) mod 2w) bitand b).
- Let z3 be Xi xor (((Xi lshift t) mod 2w) bitand c).
- Let z4 be z3 xor (z3 rshift l).
- Deliver z4 as the result (i.e. GA(xi)=z4).
[edit] Predefined specializations
The following specializations define the random number engine with two commonly used parameter sets:
Defined in header
<random> | |
Type | Definition |
mt19937 (C++11)
|
std::mersenne_twister_engine<std::uint_fast32_t, |
mt19937_64 (C++11)
|
std::mersenne_twister_engine<std::uint_fast64_t, |
[edit] Nested types
Type | Definition |
result_type
|
UIntType
|
[edit] Data members
constexpr size_t word_size [static] |
w (public static member constant) |
constexpr size_t state_size [static] |
n (public static member constant) |
constexpr size_t shift_size [static] |
m (public static member constant) |
constexpr size_t mask_bits [static] |
r (public static member constant) |
constexpr UIntType xor_mask [static] |
a (public static member constant) |
constexpr size_t tempering_u [static] |
u (public static member constant) |
constexpr UIntType tempering_d [static] |
d (public static member constant) |
constexpr size_t tempering_s [static] |
s (public static member constant) |
constexpr UIntType tempering_b [static] |
b (public static member constant) |
constexpr size_t tempering_t [static] |
t (public static member constant) |
constexpr UIntType tempering_c [static] |
c (public static member constant) |
constexpr size_t tempering_l [static] |
l (public static member constant) |
constexpr UIntType initialization_multiplier [static] |
f (public static member constant) |
constexpr UIntType default_seed [static] |
5489u (public static member constant) |
[edit] Member functions
Construction and Seeding | |
constructs the engine (public member function) | |
sets the current state of the engine (public member function) | |
Generation | |
advances the engine's state and returns the generated value (public member function) | |
advances the engine's state by a specified amount (public member function) | |
Characteristics | |
[static] |
gets the smallest possible value in the output range (public static member function) |
[static] |
gets the largest possible value in the output range (public static member function) |
[edit] Non-member functions
(C++11)(C++11)(removed in C++20) |
compares the internal states of two pseudo-random number engines (function) |
(C++11) |
performs stream input and output on pseudo-random number engine (function template) |
[edit] Example
This section is incomplete Reason: no example |