在具有相同种子的不同OS上实现相同的随机数序列

时间:2016-11-01 13:27:01

标签: c++ c++11 random

有没有办法在不同的操作系统中使用相同的种子实现相同的随机数字序列? 我试过这段代码:

std::default_random_engine engine(seed);
std::uniform_int_distribution<int> dist(0, N-1);

如果我在一台机器上使用相同的种子多次运行此代码,则dist(引擎)的顺序是相同的,但在不同的操作系统上顺序是不同的。

1 个答案:

答案 0 :(得分:38)

是的,但是你需要一个不同的或者说完全相同,每个平台上都有相同的PRNG。 std::default_random_engine engine是实施定义的PRNG。这意味着您可能无法在每个平台上获得相同的PRNG。如果你没有相同的序列那么你获得相同序列的几率非常低。

您需要的是像std::mt19937这样的东西,它需要为同一种子提供相同的输出。事实上,除了std::default_random_engine engine之外,<random>中定义的所有生成器在使用相同的种子时都会产生相同的输出。

您需要知道的另一件事是std::uniform_int_distribution也是实现定义的。它必须使用的公式已定义,但它实现的方式由实现者决定。这意味着您可能无法获得完全相同的输出。如果您需要便携性,您将需要推出自己的发行版或获得第三方,无论平台如何,它都将始终相同。