##
table of contents

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 |