O C ++ 11 inclui um gerador Mersenne Twister por padrão como parte de sua nova <random>
interface. Por exemplo, para gerar números inteiros uniformemente entre [-10, 10] usando MT:
std::mt19937 eng; // This is the Mersenne Twister
std:::uniform_int_distribution<int> dist(-10, 10)
for (int i = 0; i < 10; ++i)
std::cout << dist(eng) << std::endl;
A maior parte disso também está disponível em qualquer compilador que oferece TR1, embora os nomes sejam ligeiramente diferentes; std::tr1::mt19937
e std::tr1::uniform_int<int>
.
Normalmente, aconselho as pessoas a não usarem o Mersenne Twister. É um algoritmo correto, mas grande parte de sua popularidade é apenas marketing. 624 dimensões de aleatoriedade são mais do que a maioria das pessoas precisa, e o MT carrega requisitos de estado relativamente pesados e, quando faz um recálculo de uma tabela completa, pode danificar o cache. Pessoalmente, sou parcial com o xorshift, que oferece excelentes períodos e distribuições razoáveis para qualquer coisa que um jogo precise, com poucos requisitos de memória e CPU.
Eu escrevi um gerador xorshift compatível com C ++ 11 ( xorshift.hpp , xorshift.cpp ) e o coloquei em domínio público. Você pode conectar isso a qualquer função de randomização C ++ 11, como acima:
xorshift eng;
std:::uniform_int_distribution<int> dist(-10, 10)
for (int i = 0; i < 10; ++i)
std::cout << dist(eng) << std::endl;