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;