2016-04-30 17 views
0

我工作的一個測試套件我的包,和我想的數據塊上運行我的算法測試的一部分。然而,它發生在我身上,而不是硬編碼一個特定的數據塊,我可以使用算法來生成它。我想知道C++ 11 <random>設施是否適合此目的。可以使用C++ 11 PRNG來產生可重複的結果嗎?

從我的理解,需要C++ 11個的隨機數引擎來實現特定的算法。因此,給定相同的種子,它們應該在由算法參數定義的範圍內產生相同的隨機整數序列。

然而,只要分佈而言,該標準規定:

用於產生每個指定分佈的算法是實現定義的。

(26.5.8.1隨機數分佈類模板/一般)

哪些 - 除非我錯了 - 是指分佈的輸出是非常不確定的。從我測試的結果來看,GNU libstdC++和LLVM項目的libC++中的發行版在給定相同的隨機引擎的情況下會產生不同的結果。

的問題將因此會:什麼是生產,這將是在不同的平臺完全可重複的僞隨機數據的最正確的方法是什麼?

+0

這意味着你要麼使用隨機數發生器直接,或使用其是便攜式的分佈。由於標準的不是,所以你必須使用非標準的(手寫的或第三方的) – milleniumbug

+0

你可以使用散列和,例如SHA – LibertyPaul

回答

2

什麼是生成可在不同平臺間完全重複的僞隨機數據的最正確方法?

這將是顯而易見的:寫你自己的分佈。正如你自己指出的那樣,引擎是跨平臺的,因爲它們實現了特定的算法。它是由實現定義的分佈。

所以自己寫的分佈。

相關問題