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

tty*_*ty6 32 c++ random c++11

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

std::default_random_engine engine(seed);
std::uniform_int_distribution<int> dist(0, N-1);
Run Code Online (Sandbox Code Playgroud)

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

Nat*_*ica 38

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

您需要的是std::mt19937为同一种子提供相同输出所需的东西.事实上,所有的定义发电机<random>除了std::default_random_engine engine使用相同的种子时就会产生相同的输出.

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