Это гарантировано стандартом, что если std::mt19937
был посеян по одному и тому же номеру, он будет выдавать одинаковую последовательность номеров на всех платформах?
Другими словами, является ли его реализация хорошо определенной стандартом или std::rand()
который рассматривался как детали реализации?
В [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 его реализация является хорошо определены.
Других решений пока нет …