标准是否保证如果std::mt19937
以相同的数字播种,它将在所有平台上产生相同的数字序列?
换句话说,它的实现是由标准定义的,还是像std::rand()
那样被视为实现细节?
答案 0 :(得分:5)
在[rand.eng.mars] 1-5中,该段落基本上总结了mersenne twister algorithm的实施细节。
std::mt19937
只是
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实现,所以它的实现 定义良好。