У меня возникли проблемы с определением того, какой вариант Mersenne Twister С++ 11 предоставляет. Глядя на статью Matsumoto и Nishimura ACM на Mersenne twister: A 623 равномерно распределенный унифицированный генератор псевдослучайных чисел, авторы предоставляют алгоритм, реализацию алгоритма, и назовите его MT19937
.
Однако, когда я тестирую генератор с одинаковым именем С++ 11 с небольшой программой ниже, я не могу воспроизвести поток, созданный Matsumoto и Nishimura MT19937. Потоки отличаются от самого первого 32-битного слова.
Какой Mersenne Twister делает С++ 11?
Программа, приведенная ниже, была запущена на Fedora 22 с использованием GCC, -std=c++11
и GNU stdlibc++
.
std::mt19937 prng(102013);
for (unsigned int i = 0; i <= 625; i++)
{
cout << std::hex << prng();
if(i+1 != 625)
cout << ",";
if(i && i%8 == 0)
cout << endl;
}