标准是否保证如果std::mt19937
以相同的数字作为种子,它将在所有平台上产生相同的数字序列?
换句话说,它的实现是否由标准明确定义,或者就像std::rand()
被认为是实现细节一样?
在[rand.eng.mars] 1-5 中,该段落基本上总结了mersenne twister 算法的实现细节。
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 实现,所以它的实现是明确定义的。