2017-03-27 60 views
2

我的用例是:我需要隨機數字,但僅用於圖形(不適用於密碼學)。我需要能夠獲得2個渲染/運行相同的圖像(結果)。例如,使用time()作爲種子不會爲下一次運行創建相同的結果。所以我需要一個不變的種子。C++中Mersenne Twister的最佳常量種子11

Mersenne Twister的文檔說它不喜歡0作爲種子,它也不喜歡某些位組合。對於這種情況,據說需要多達800000個電話,直到它再次提供好的隨機數。出於速度的原因,我不想花費80萬次通話的開銷。 理想情況下,我需要一些可以作爲種子直接使用的值得信賴的值。

+2

你嘗試過'4'嗎? –

+0

測試時,你真的需要真正的隨機結果嗎? – NathanOliver

+0

爲什麼兩次運行需要相同的結果?如果答案是「可重複性」,那麼你應該從標準源(如時間戳)獲取種子並記錄下來,並使其可選地作爲命令行參數進行覆蓋。這是例如使用的方法。 GTEST。 –

回答

1

只需選擇任何你想要的數字。

需要牢記的是,密碼學專家和算法分析師用於「高質量隨機性」的標準幾乎肯定遠高於您的項目所需的標準,特別是對於經過良好測試的算法梅森扭轉者。這些標準中的大多數都是針對錯誤測試場景或統計分析而設計的,其中隨機數字的「低質量」序列可能有可能錯過重要的測試用例,或者數字可能會偏離預期的平均/中值/標準偏差的結果。

這些在你的應用程序中是不太可能的。

+0

我試過0,4和2384572893作爲種子。結果看起來非常相似。我確實看到一些結構爲0,會消失4和2384572893,但這可能是純粹的機會。 – MatthiasL

+0

Mersenne Twister在其狀態數組中的所有元素均爲零時存在問題 - 與傳遞給「種子」或構造函數的數量或序列不同。使用算法將熵從種子值擴展到避免退化情況的狀態陣列中。所以這個答案是正確的,只需選擇你想要的任何數字。 –