2016-11-01 53 views
30

有没有什么办法在不同的操作系统中使用相同的种子来实现相同的随机int数序列? 我曾尝试这样的代码:在具有相同种子的不同操作系统上实现相同的随机数序列

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

如果我与相同的种子,DIST(发动机)的序列中的一个机器多次运行该代码是相同的,但在不同的操作系统序列是不同的。

+6

因为'std :: default_random_engine'不必在每个系统上都是相同的PNRG,所以使用'std :: mt19937'。 –

+2

我相信像std :: mt19937这样的特殊随机引擎需要为特定的种子提供相同的数字,但我不认为这种分布是。所以你可能需要编写你自己的发行版。 –

回答

37

是的,但您需要一个不同的或准确地说,在每个平台上相同的PRNG。 std::default_random_engine engine是一个定义PRNG的实现。这意味着您可能无法在每个平台上获得相同的PRNG。如果你没有相同的序列,那么获得相同序列的几率就会很低。

你需要的是类似std::mt19937这是需要给相同的种子相同的输出。实际上,除std::default_random_engine engine之外,<random>中的所有定义的生成器在使用相同种子时将产生相同的输出。

您需要知道的另一件事是std::uniform_int_distribution也是实现定义的。必须使用的公式必须使用,但其实现方式由实现者决定。这意味着你可能得不到完全相同的输出。如果你需要可移植性,你将需要推出自己的发行版,或者获得第三方发行版,而不管平台如何都将保持不变。

相关问题