C ++ 11 за замовчуванням включає генератор Mersenne Twister як частину нового <random>
інтерфейсу. Наприклад, для генерування цілих чисел рівномірно між [-10, 10] за допомогою 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;
Більшість цього є також у будь-якому компіляторі, що пропонує TR1, хоча назви дещо відрізняються; std::tr1::mt19937
і std::tr1::uniform_int<int>
.
Зазвичай я застерігаю людей від використання Mersenne Twister. Це нормальний алгоритм, але велика його популярність - це лише маркетинг. 624 розміри випадковості більше, ніж потрібно більшості людей, і MT вимагає відносно важких вимог до стану, і коли він робить повний стіл, то він може видалити кеш. Я особисто частковий в xorshift, який дає чудові періоди та розумні дистрибуції для всього, що потрібно грі, з крихітною пам'яттю та вимогами до процесора.
Я написав (в основному?) C ++ 11-сумісний генератор xorshift - xorshift.hpp , xorshift.cpp - і розмістив його у відкритому доступі. Ви можете підключити його до будь-якої функції рандомізації C ++ 11, як описано вище:
xorshift eng;
std:::uniform_int_distribution<int> dist(-10, 10)
for (int i = 0; i < 10; ++i)
std::cout << dist(eng) << std::endl;