c ++ 11 — Воспроизвести тот же результат генератора случайных чисел в C ++ 11

Это гарантировано стандартом, что если std::mt19937 был посеян по одному и тому же номеру, он будет выдавать одинаковую последовательность номеров на всех платформах?

Другими словами, является ли его реализация хорошо определенной стандартом или std::rand() который рассматривался как детали реализации?

0

Решение

В [rand.eng.mars] 1-5 отрывок в основном подводит итоги реализации для алгоритм Мерсена Твистера.

std::mt19937 это просто typedef для

using mt19937 =
mersenne_twister_engine<uint_fast32_t,
32,624,397,31,0x9908b0df,11,0xffffffff,7,0x9d2c5680,15,0xefc60000,18,1812433253>;

И все стандарт говорит об ожидаемых результатах, что:

Требуемое поведение: 10000-й последовательный вызов
построенный по умолчанию объект типа mt19937 должен произвести значение
4123659995.

Других гарантий нет.

Тем не менее, потому что std::mersenne_twister_engine требуется следить за реализацией PRNG Mersenne Twister его реализация является хорошо определены.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]