C++ 11标准是否保证跨实现的相同种子的相同随机数?

Jos*_*vin 20 c++ random standards c++11

例如,如果我std::mt19937在GCC和MSVC下使用完全相同的种子和参数实例化a ,我应该得到相同的随机数序列吗?如果是这样的话,我认为这个属性通常适用于mersenne_twister_engine,因为mt19937只是一个具有特定参数的属性.这rand()在C中是不正确的.看起来标准文档是根据特定代码应用的转换,所以我怀疑它应该始终是相同的,但是魔鬼在细节中......

Pet*_*ker 22

对于新的随机数引擎,是的,对于相同的种子和参数,您将在所有平台上获得相同的值序列.对rand(),没有.您也没有随机数分布的保证,即使它们被输入相同的输入值序列.

  • @rici - 每个实现的`rand()`版本都需要在给定相同种子的情况下生成相同的序列,但不要求不同的实现生成相同的序列. (8认同)
  • 此外,分发不能保证产生相同的值,因此将引擎与分布组合在一起不会在平台上产生相同的结果. (3认同)
  • 皮特啊,真的,算法没有定义.@JosephGarvin,Mersenne扭转算法(和其他一些伪随机算法)在C++标准中详细定义,见第26.5.3节(Mersenne twister的26.5.3.2). (2认同)