重现C ++ 11随机生成器的相同结果

时间:2016-09-28 08:06:17

标签: c++ c++11 random mt19937

标准是否保证如果std::mt19937以相同的数字播种,它将在所有平台上产生相同的数字序列?

换句话说,它的实现是由标准定义的,还是像std::rand()那样被视为实现细节?

1 个答案:

答案 0 :(得分:5)

[rand.eng.mars] 1-5中,该段落基本上总结了mersenne twister algorithm的实施细节。

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需要遵循mersenne twister PRNG实现,所以它的实现 定义良好。