重现 C++ 11 随机生成器的相同结果
Reproduce the same result of the C++ 11 random generator
标准是否保证如果std::mt19937
被相同的数字播种,它会在所有平台上产生相同的数字序列?
换句话说,它的实现是否由标准明确定义,或者它像 std::rand()
被认为是实现细节?
在[rand.eng.mars] 1-5 the passage basically sums up the implementation details for the 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>;
所有关于预期结果的标准都是:
Required behavior: The 10000 th consecutive invocation of a
default-constructed object of type mt19937 shall produce the value
4123659995.
不做其他保证。
但是,因为 std::mersenne_twister_engine
需要遵循梅森扭曲器 PRNG 实现,所以它的实现 定义明确。
标准是否保证如果std::mt19937
被相同的数字播种,它会在所有平台上产生相同的数字序列?
换句话说,它的实现是否由标准明确定义,或者它像 std::rand()
被认为是实现细节?
在[rand.eng.mars] 1-5 the passage basically sums up the implementation details for the 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>;
所有关于预期结果的标准都是:
Required behavior: The 10000 th consecutive invocation of a default-constructed object of type mt19937 shall produce the value 4123659995.
不做其他保证。
但是,因为 std::mersenne_twister_engine
需要遵循梅森扭曲器 PRNG 实现,所以它的实现 定义明确。