0

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

换句话说,它的实现是否由标准明确定义,或者就像std::rand()被认为是实现细节一样?

4

1 回答 1

6

[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 实现,所以它的实现明确定义的。

于 2016-09-28T08:17:27.807 回答