Mersenne Twister跨编译器的再现性

时间:2014-12-15 20:13:29

标签: c++ random c++-standard-library

我用std :: mt19937_64生成一系列随机数。我注意到,当GCC和Clang在相同的平台上使用相同的种子运行时,我获得了不同的序列。我通过Valgrind运行程序,发现没有未初始化的内存。

使用std :: mt19937_64是否可以保证编译器或跨平台的可重复性?

编辑:使用std :: normal_distribution

运行

1 个答案:

答案 0 :(得分:10)

引擎生成的数字保证可以跨实现重现,但分布不是。 (来源:rand() considered harmful)。

N3337标准草案关于normal_distribution(26.5.8.5.1):

  

normal_distribution随机数分布产生根据概率密度函数分布的随机数x

     

enter image description here

     

分布参数μ和σ也称为该分布的均值和标准差

而且......就是这样。它没有指定生成的数字的顺序,也没有指定算法,也没有指定示例输出。

该标准非常详细说明mersenne_twister_engine(26.5.3.2),它指定了状态转移函数,初始种子算法等。