2016-11-01 54 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也是實現定義的。必須使用的公式必須使用,但其實現方式由實現者決定。這意味着你可能得不到完全相同的輸出。如果你需要可移植性,你將需要推出自己的發行版,或者獲得第三方發行版,而不管平臺如何都將保持不變。

相關問題