C ++ 11 enthält standardmäßig einen Mersenne Twister-Generator als Teil seiner neuen <random>
Schnittstelle. Um beispielsweise mit MT ganze Zahlen gleichmäßig zwischen [-10, 10] zu generieren, gehen Sie wie folgt vor:
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;
Das meiste davon ist auch in jedem Compiler verfügbar, der TR1 anbietet, obwohl die Namen leicht unterschiedlich sind. std::tr1::mt19937
und std::tr1::uniform_int<int>
.
Normalerweise warne ich Leute davor, Mersenne Twister zu benutzen. Es ist ein akzeptabler Algorithmus, aber ein Großteil seiner Popularität ist nur Marketing. 624 Dimensionen der Zufälligkeit sind mehr als die meisten Menschen brauchen, und MT stellt relativ hohe Zustandsanforderungen, und wenn es eine vollständige Tabellenumrechnung durchführt, kann es den Cache sprengen. Ich persönlich bin ein Teil von xorshift, das exzellente Perioden und angemessene Verteilungen für alles bietet, was ein Spiel benötigt, mit winzigen Speicher- und CPU-Anforderungen.
Ich habe einen (meistens?) C ++ 11-kompatiblen Xorshift-Generator geschrieben - xorshift.hpp , xorshift.cpp - und ihn öffentlich zugänglich gemacht. Sie können dies in eine beliebige C ++ 11-Randomisierungsfunktion wie oben einbinden:
xorshift eng;
std:::uniform_int_distribution<int> dist(-10, 10)
for (int i = 0; i < 10; ++i)
std::cout << dist(eng) << std::endl;