# The Mersenne Twister in C++

The Mersenne Twister is a very fast random number generator of period
2^{19937}–1 introduced by Makoto Matsumoto and Takuji Nishimura. This
is a C++ version of the Mersenne Twister based on the original C code written
by the authors of the algorithm.

*Note*: A faster variant, the SIMD-oriented Fast Mersenne Twister
(SFMT) was introduced by Mutsuo Saito and Makoto Matsumoto in 2006.

## Usage

The files `mt.h`

and `mt.cc`

define the `MersenneTwister`

class. Below is
a simple example illustrating the usage of the class which takes 1,000,000
draws from the Uniform(0,1) distribution and calculates the mean. This file,
`mtex.cc`

, is included in the distribution along with more a complex
example, `mttest.cc`

which shows how to seed the `MersenneTwister`

class.

```
// mtex.cc: Calculates the sample mean of 1,000,000 draws from U(0,1).
#include <iostream>
#include "mt.h"
using namespace std;
int main (int argc, char** argv) {
int N = 1000000;
double ran[N];
double mean = 0.0;
// Initialize a Mersenne Twister
MersenneTwister mt;
mt.print();
// Take N draws from Uniform(0,1)
for (int i = 0; i < N; i++) {
ran[i] = mt.random();
}
// Calculate the mean
for (int i = 0; i < N; i++) {
mean += ran[i];
}
mean /= N;
cout << "Sample mean of " << N << "draws:" << mean << endl;
return EXIT_SUCCESS;
}
```

## Download

The entire distribution can be downloaded as a tarball: mt.tar.gz.