Scroll to navigation

std::mersenne_twister_engine::mersenne_twister_engine(3) C++ Standard Libary std::mersenne_twister_engine::mersenne_twister_engine(3)

NAME

std::mersenne_twister_engine::mersenne_twister_engine - std::mersenne_twister_engine::mersenne_twister_engine

Synopsis


mersenne_twister_engine() : (1) (since C++11)
mersenne_twister_engine(default_seed) {}
explicit mersenne_twister_engine( result_type value ); (2) (since C++11)
template< class SeedSeq > (3) (since C++11)
explicit mersenne_twister_engine( SeedSeq& seq );
mersenne_twister_engine( const mersenne_twister_engine& (4) (since C++11)
other ); (implicitly declared)


Constructs the pseudo-random number engine.


1) The default constructor.
2) Constructs the engine with a seed value value. Given \(2^w\)2w
as p, the engine's initial state is determined as follows:
1. Sets \(X_{-n}\)X
-n to value % p.
2. For each integer i in [i - n, -1], sets \(X_i\)X
i to \([f \cdot (X_{i-1}\ \mathsf{xor}\ (X_{i-1}\ \mathsf{rshift}\ (w-2)))+i\mod
n]\mod p\)[f·(X
i-1 xor (X
i-1 rshift (w-2)))+i mod n] mod p, where \(\mathsf{xor}\)xor and
\(\mathsf{rshift}\)rshift stand for built-in bitwise XOR and bitwise right-shift
respectively.
3) Constructs the engine with a seed sequence seq. Given std::size_t(w / 32) + 1 as
k, the engine's initial state is determined as follows:
1. Creates an invented array object a of length n * k.
2. Calls seq.generate(a + 0, a + n * k).
3. For each integer i in [-n, -1], sets \(X_{i}\)X
i to \((\sum^{k-1}_{j=0} a_{k(i+n)+j} \cdot 2^{32j}) \mod 2^w\)(∑k-1
j=0 a
k(i+n)+j·232j
) mod 2w
.
4. If the most significant w − r bits of \(X_{-n}\)X
-n are zero, and if each of the other resulting \(X_{i}\)X
i is 0, changes \(X_{-n}\)X
-n to \(2^{w-1}\)2w-1
.
This overload participates in overload resolution only if SeedSeq meets the
requirements of SeedSequence.
4) The copy constructor. Upon construction, *this == other is true.

Parameters


value - seed value to use in the initialization of the internal state
seq - seed sequence to use in the initialization of the internal state

Complexity


1,2) \(\small{O(n)}\)O(n).
3) Same as the complexity of the seq.generate call.
4) \(\small{O(n)}\)O(n).


Defect reports


The following behavior-changing defect reports were applied retroactively to
previously published C++ standards.


DR Applied to Behavior as published Correct behavior
P0935R0 C++11 the default constructor was explicit made implicit

See also


seed sets the current state of the engine
(C++11) (public member function)

2024.06.10 http://cppreference.com