std::mersenne_twister_engine::mersenne_twister_engine
std::mersenne_twister_engine::mersenne_twister_engine
explicit mersenne_twister_engine( result_type value = default_seed ); | (1) | (since C++11) |
template< class Sseq > explicit mersenne_twister_engine( Sseq& s ); | (2) | (since C++11) |
mersenne_twister_engine( const mersenne_twister_engine& ); | (3) | (since C++11) (implicitly declared) |
Constructs the pseudo-random number engine.
1) Constructs the engine and initializes the state (
i of type
is used to initialize X
0 and the rest are initialized iteratively, for i=1-n,...,-1, each X
i is initialized to [f·(X
i-1xor(X
i-1rshift(w-2)))+i mod n] mod 2w
n
values Xi of type
result_type
) as follows: value mod 2wis used to initialize X
0 and the rest are initialized iteratively, for i=1-n,...,-1, each X
i is initialized to [f·(X
i-1xor(X
i-1rshift(w-2)))+i mod n] mod 2w
2) Constructs the engine and initializes the state by calling
i to (Σk-1
j=0a
k(i+n)+j}·232j
) mod 2w
, and finally if the most significant w-r bits of X
0 are zero, and if all other X
i are zero, replacing X
0 with 2w-1
.
s.generate(a, a+n*k)
where a is an array of length n*k and k is ceil(w/32) and then, iteratively for i=-n,...,-1, setting each element of the engine state Xi to (Σk-1
j=0a
k(i+n)+j}·232j
) mod 2w
, and finally if the most significant w-r bits of X
0 are zero, and if all other X
i are zero, replacing X
0 with 2w-1
.
Note: initialization requirements are based on the 2002 version of Mersenne Twister, mt19937ar.c.
The overload (2) only participates in overload resolution if Sseq
qualifies as a SeedSequence
. In particular, it is excluded from the set of candidate functions if Sseq
is convertible to result_type
.
Parameters
value | - | seed value to use in the initialization of the internal state |
s | - | seed sequence to use in the initialization of the internal state |
Complexity
linear in n
(the state size).
See also
sets the current state of the engine (public member function) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine/mersenne_twister_engine