---
name: "std::mersenne_twister_engine"
section: "3cxx"
platform: "linux"
package: "libstdc++-12-doc"
version: "12.4.0-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/std::mersenne_twister_engine/3cxx"
---

# std::mersenne\_twister\_engine(3cxx)

## NAME

std::mersenne\_twister\_engine\< \_UIntType, \_\_w, \_\_n, \_\_m, \_\_r, \_\_a, \_\_u, \_\_d, \_\_s, \_\_b, \_\_t, \_\_c, \_\_l, \_\_f \>

## SYNOPSIS

`#include <random>`

### Public Types

**typedef** \_UIntType **result\_type**\

### Public Member Functions

template\<**typename** **\_Sseq** , **typename**  = \_If\_seed\_seq\<\_Sseq\>\> **mersenne\_twister\_engine** (**\_Sseq** &\_\_q)\
 Constructs a mersenne\_twister\_engine random number generator engine seeded from the seed sequence `__q`.  **mersenne\_twister\_engine** (**result\_type** **\_\_sd**)\
 **void** **discard** (unsigned long long **\_\_z**)\
 Discard a sequence of random numbers.  **result\_type** **operator()** ()\
 template\<**typename** **\_Sseq** \> \_If\_seed\_seq\< **\_Sseq** \> **seed** (**\_Sseq** &\_\_q)\
 template\<**typename** **\_Sseq** \> **auto** **seed** (**\_Sseq** &\_\_q) -\> \_If\_seed\_seq\< **\_Sseq** \>\
 **void** **seed** (**result\_type** **\_\_sd**=default\_seed)\

### Static Public Member Functions

**static** constexpr **result\_type** **max** ()\
 Gets the largest possible value in the output range.  **static** constexpr **result\_type** **min** ()\
 Gets the smallest possible value in the output range.

### Static Public Attributes

**static** constexpr **result\_type** **default\_seed**\
 **static** constexpr **result\_type** **initialization\_multiplier**\
 **static** constexpr size\_t **mask\_bits**\
 **static** constexpr size\_t **shift\_size**\
 **static** constexpr size\_t **state\_size**\
 **static** constexpr **result\_type** **tempering\_b**\
 **static** constexpr **result\_type** **tempering\_c**\
 **static** constexpr **result\_type** **tempering\_d**\
 **static** constexpr size\_t **tempering\_l**\
 **static** constexpr size\_t **tempering\_s**\
 **static** constexpr size\_t **tempering\_t**\
 **static** constexpr size\_t **tempering\_u**\
 **static** constexpr size\_t **word\_size**\
 **static** constexpr **result\_type** **xor\_mask**\

### Friends

template\<**typename** **\_UIntType1** , size\_t \_\_w1, size\_t \_\_n1, size\_t \_\_m1, size\_t \_\_r1, **\_UIntType1** \_\_a1, size\_t \_\_u1, **\_UIntType1** \_\_d1, size\_t \_\_s1, **\_UIntType1** \_\_b1, size\_t \_\_t1, **\_UIntType1** \_\_c1, size\_t \_\_l1, **\_UIntType1** \_\_f1, **typename** \_CharT , **typename** \_Traits \> **std::basic\_ostream**\< \_CharT, \_Traits \> & **operator\<\<** (**std::basic\_ostream**\< \_CharT, \_Traits \> &**\_\_os**, const **std::mersenne\_twister\_engine**\< **\_UIntType1**, **\_\_w1**, **\_\_n1**, **\_\_m1**, **\_\_r1**, **\_\_a1**, **\_\_u1**, **\_\_d1**, **\_\_s1**, **\_\_b1**, **\_\_t1**, **\_\_c1**, **\_\_l1**, **\_\_f1** \> &\_\_x)\
 Inserts the current state of a % mersenne\_twister\_engine random number generator engine `__x` into the output stream `__os`.  bool **operator==** (const **mersenne\_twister\_engine** &**\_\_lhs**, const **mersenne\_twister\_engine** &**\_\_rhs**)\
 Compares two % mersenne\_twister\_engine random number generator objects of the same type for equality.  template\<**typename** **\_UIntType1** , size\_t \_\_w1, size\_t \_\_n1, size\_t \_\_m1, size\_t \_\_r1, **\_UIntType1** \_\_a1, size\_t \_\_u1, **\_UIntType1** \_\_d1, size\_t \_\_s1, **\_UIntType1** \_\_b1, size\_t \_\_t1, **\_UIntType1** \_\_c1, size\_t \_\_l1, **\_UIntType1** \_\_f1, **typename** \_CharT , **typename** \_Traits \> **std::basic\_istream**\< \_CharT, \_Traits \> & **operator\>\>** (**std::basic\_istream**\< \_CharT, \_Traits \> &**\_\_is**, **std::mersenne\_twister\_engine**\< **\_UIntType1**, **\_\_w1**, **\_\_n1**, **\_\_m1**, **\_\_r1**, **\_\_a1**, **\_\_u1**, **\_\_d1**, **\_\_s1**, **\_\_b1**, **\_\_t1**, **\_\_c1**, **\_\_l1**, **\_\_f1** \> &\_\_x)\
 Extracts the current state of a % mersenne\_twister\_engine random number generator engine `__x` from the input stream `__is`.

## Detailed Description

### template\<typename \_UIntType, size\_t \_\_w, size\_t \_\_n, size\_t \_\_m, size\_t \_\_r, \_UIntType \_\_a, size\_t \_\_u, \_UIntType \_\_d, size\_t \_\_s, \_UIntType \_\_b, size\_t \_\_t, \_UIntType \_\_c, size\_t \_\_l, \_UIntType \_\_f\>

class std::mersenne\_twister\_engine\< \_UIntType, \_\_w, \_\_n, \_\_m, \_\_r, \_\_a, \_\_u, \_\_d, \_\_s, \_\_b, \_\_t, \_\_c, \_\_l, \_\_f \>"A generalized feedback shift register discrete random number generator.

This algorithm avoids multiplication and division and is designed to be friendly to a pipelined architecture. If the parameters are chosen correctly, this generator will produce numbers with a very long period and fairly good apparent entropy, although still not cryptographically strong.

The best way to use this generator is with the predefined mt19937 class.

This algorithm was originally invented by Makoto Matsumoto and Takuji Nishimura.

**Template Parameters**

*\_\_w* Word size, the number of bits in each element of the state vector. \
 *\_\_n* The degree of recursion. \
 *\_\_m* The period parameter. \
 *\_\_r* The separation point bit index. \
 *\_\_a* The last row of the twist matrix. \
 *\_\_u* The first right-shift tempering matrix parameter. \
 *\_\_d* The first right-shift tempering matrix mask. \
 *\_\_s* The first left-shift tempering matrix parameter. \
 *\_\_b* The first left-shift tempering matrix mask. \
 *\_\_t* The second left-shift tempering matrix parameter. \
 *\_\_c* The second left-shift tempering matrix mask. \
 *\_\_l* The second right-shift tempering matrix parameter. \
 *\_\_f* Initialization multiplier.

## Member Typedef Documentation

### template\<typename \_UIntType , size\_t \_\_w, size\_t \_\_n, size\_t \_\_m, size\_t \_\_r, \_UIntType \_\_a, size\_t \_\_u, \_UIntType \_\_d, size\_t \_\_s, \_UIntType \_\_b, size\_t \_\_t, \_UIntType \_\_c, size\_t \_\_l, \_UIntType \_\_f\> typedef \_UIntType std::mersenne\_twister\_engine\< \_UIntType, \_\_w, \_\_n, \_\_m, \_\_r, \_\_a, \_\_u, \_\_d, \_\_s, \_\_b, \_\_t, \_\_c, \_\_l, \_\_f \>::result\_type

The type of the generated random value.

## Constructor & Destructor Documentation

### template\<typename \_UIntType , size\_t \_\_w, size\_t \_\_n, size\_t \_\_m, size\_t \_\_r, \_UIntType \_\_a, size\_t \_\_u, \_UIntType \_\_d, size\_t \_\_s, \_UIntType \_\_b, size\_t \_\_t, \_UIntType \_\_c, size\_t \_\_l, \_UIntType \_\_f\> template\<typename \_Sseq , typename = \_If\_seed\_seq\<\_Sseq\>\> std::mersenne\_twister\_engine\< \_UIntType, \_\_w, \_\_n, \_\_m, \_\_r, \_\_a, \_\_u, \_\_d, \_\_s, \_\_b, \_\_t, \_\_c, \_\_l, \_\_f \>::mersenne\_twister\_engine (\_Sseq & \_\_q)` [inline]`, ` [explicit]`

Constructs a mersenne\_twister\_engine random number generator engine seeded from the seed sequence `__q`.

**Parameters**

*\_\_q* the seed sequence.

## Member Function Documentation

### template\<typename \_UIntType , size\_t \_\_w, size\_t \_\_n, size\_t \_\_m, size\_t \_\_r, \_UIntType \_\_a, size\_t \_\_u, \_UIntType \_\_d, size\_t \_\_s, \_UIntType \_\_b, size\_t \_\_t, \_UIntType \_\_c, size\_t \_\_l, \_UIntType \_\_f\> void std::mersenne\_twister\_engine\< \_UIntType, \_\_w, \_\_n, \_\_m, \_\_r, \_\_a, \_\_u, \_\_d, \_\_s, \_\_b, \_\_t, \_\_c, \_\_l, \_\_f \>::discard (unsigned long long \_\_z)

Discard a sequence of random numbers.

### template\<typename \_UIntType , size\_t \_\_w, size\_t \_\_n, size\_t \_\_m, size\_t \_\_r, \_UIntType \_\_a, size\_t \_\_u, \_UIntType \_\_d, size\_t \_\_s, \_UIntType \_\_b, size\_t \_\_t, \_UIntType \_\_c, size\_t \_\_l, \_UIntType \_\_f\> static constexpr result\_type std::mersenne\_twister\_engine\< \_UIntType, \_\_w, \_\_n, \_\_m, \_\_r, \_\_a, \_\_u, \_\_d, \_\_s, \_\_b, \_\_t, \_\_c, \_\_l, \_\_f \>::max ()` [inline]`, ` [static]`, ` [constexpr]`

Gets the largest possible value in the output range.

### template\<typename \_UIntType , size\_t \_\_w, size\_t \_\_n, size\_t \_\_m, size\_t \_\_r, \_UIntType \_\_a, size\_t \_\_u, \_UIntType \_\_d, size\_t \_\_s, \_UIntType \_\_b, size\_t \_\_t, \_UIntType \_\_c, size\_t \_\_l, \_UIntType \_\_f\> static constexpr result\_type std::mersenne\_twister\_engine\< \_UIntType, \_\_w, \_\_n, \_\_m, \_\_r, \_\_a, \_\_u, \_\_d, \_\_s, \_\_b, \_\_t, \_\_c, \_\_l, \_\_f \>::min ()` [inline]`, ` [static]`, ` [constexpr]`

Gets the smallest possible value in the output range.

## Friends And Related Symbol Documentation

### template\<typename \_UIntType , size\_t \_\_w, size\_t \_\_n, size\_t \_\_m, size\_t \_\_r, \_UIntType \_\_a, size\_t \_\_u, \_UIntType \_\_d, size\_t \_\_s, \_UIntType \_\_b, size\_t \_\_t, \_UIntType \_\_c, size\_t \_\_l, \_UIntType \_\_f\> template\<typename \_UIntType1 , size\_t \_\_w1, size\_t \_\_n1, size\_t \_\_m1, size\_t \_\_r1, \_UIntType1 \_\_a1, size\_t \_\_u1, \_UIntType1 \_\_d1, size\_t \_\_s1, \_UIntType1 \_\_b1, size\_t \_\_t1, \_UIntType1 \_\_c1, size\_t \_\_l1, \_UIntType1 \_\_f1, typename \_CharT , typename \_Traits \> std::basic\_ostream\< \_CharT, \_Traits \> & operator\<\< (std::basic\_ostream\< \_CharT, \_Traits \> & \_\_os, const std::mersenne\_twister\_engine\< \_UIntType1, \_\_w1, \_\_n1, \_\_m1, \_\_r1, \_\_a1, \_\_u1, \_\_d1, \_\_s1, \_\_b1, \_\_t1, \_\_c1, \_\_l1, \_\_f1 \> & \_\_x)` [friend]`

Inserts the current state of a % mersenne\_twister\_engine random number generator engine `__x` into the output stream `__os`.

**Parameters**

*\_\_os* An output stream. \
 *\_\_x* A % mersenne\_twister\_engine random number generator engine.

**Returns**

The output stream with the state of `__x` inserted or in an error state.

### template\<typename \_UIntType , size\_t \_\_w, size\_t \_\_n, size\_t \_\_m, size\_t \_\_r, \_UIntType \_\_a, size\_t \_\_u, \_UIntType \_\_d, size\_t \_\_s, \_UIntType \_\_b, size\_t \_\_t, \_UIntType \_\_c, size\_t \_\_l, \_UIntType \_\_f\> bool operator== (const mersenne\_twister\_engine\< \_UIntType, \_\_w, \_\_n, \_\_m, \_\_r, \_\_a, \_\_u, \_\_d, \_\_s, \_\_b, \_\_t, \_\_c, \_\_l, \_\_f \> & \_\_lhs, const mersenne\_twister\_engine\< \_UIntType, \_\_w, \_\_n, \_\_m, \_\_r, \_\_a, \_\_u, \_\_d, \_\_s, \_\_b, \_\_t, \_\_c, \_\_l, \_\_f \> & \_\_rhs)` [friend]`

Compares two % mersenne\_twister\_engine random number generator objects of the same type for equality.

**Parameters**

*\_\_lhs* A % mersenne\_twister\_engine random number generator object. \
 *\_\_rhs* Another % mersenne\_twister\_engine random number generator object.

**Returns**

true if the infinite sequences of generated values would be equal, false otherwise.

### template\<typename \_UIntType , size\_t \_\_w, size\_t \_\_n, size\_t \_\_m, size\_t \_\_r, \_UIntType \_\_a, size\_t \_\_u, \_UIntType \_\_d, size\_t \_\_s, \_UIntType \_\_b, size\_t \_\_t, \_UIntType \_\_c, size\_t \_\_l, \_UIntType \_\_f\> template\<typename \_UIntType1 , size\_t \_\_w1, size\_t \_\_n1, size\_t \_\_m1, size\_t \_\_r1, \_UIntType1 \_\_a1, size\_t \_\_u1, \_UIntType1 \_\_d1, size\_t \_\_s1, \_UIntType1 \_\_b1, size\_t \_\_t1, \_UIntType1 \_\_c1, size\_t \_\_l1, \_UIntType1 \_\_f1, typename \_CharT , typename \_Traits \> std::basic\_istream\< \_CharT, \_Traits \> & operator\>\> (std::basic\_istream\< \_CharT, \_Traits \> & \_\_is, std::mersenne\_twister\_engine\< \_UIntType1, \_\_w1, \_\_n1, \_\_m1, \_\_r1, \_\_a1, \_\_u1, \_\_d1, \_\_s1, \_\_b1, \_\_t1, \_\_c1, \_\_l1, \_\_f1 \> & \_\_x)` [friend]`

Extracts the current state of a % mersenne\_twister\_engine random number generator engine `__x` from the input stream `__is`.

**Parameters**

*\_\_is* An input stream. \
 *\_\_x* A % mersenne\_twister\_engine random number generator engine.

**Returns**

The input stream with the state of `__x` extracted or in an error state.

## Author

Generated automatically by Doxygen for libstdc++ from the source code.
