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, 2
w
)
.
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 1 st to 7 th 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
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
.
X
j
stands for the
j mod n
th 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(x
i
)
) is defined as follows:
- Concatenate the upper w - r bits of X i-n with the lower r bits of X i+1-n to obtain an unsigned integer value Y .
- Let y be a·(Y bitand 1) , and set X i to X i+m−n xor (Y rshift 1) xor y .
The
generation algorithm
of
mersenne_twister_engine
(
GA(x
i
)
) is defined as follows:
- Let z 1 be X i xor ((X i rshift u) bitand d) .
- Let z 2 be X i xor (((X i lshift s) mod 2 w ) bitand b) .
- Let z 3 be X i xor (((X i lshift t) mod 2 w ) bitand c) .
- Let z 4 be z 3 xor (z 3 rshift l) .
- Deliver z 4 as the result (i.e. GA(x i )=z 4 ).
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
,
|
Nested types
Type | Definition |
result_type
|
UIntType
|
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) |
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) |
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) |
Example
This section is incomplete
Reason: no example |