2012-07-23 48 views
1

可能重複:
Random number seed targeting the same version of the .NET framework隨機數種子面向.NET框架的相同版本

是否每個CPU返回基於如果我的應用目標上相同的種子相同的隨機序列.NET框架3.5?我想知道你是否得到和我一樣的結果。我也希望每個分發我的應用程序的人都能獲得相同的結果。謝謝!

Random a = new Random(44448); 
int i1 = a.Next(65, 90); 
MessageBox.Show(i1.ToString()); 
+1

然後它不會是隨機的嗎? – 2012-07-23 19:47:50

+0

你不應該依賴這個返回相同的值 - 即使在你自己的系統上 - 即使它現在可能會做。如果微軟發佈了一個修補.NET的補丁來改變行爲,那麼你的代碼就會崩潰,並且你很難再追查下來, – ChrisF 2012-07-23 19:48:15

+0

我認爲我們應該重新打開其他的編輯問題。馬克對此有了一個深思熟慮的答案。 – 2012-07-23 19:48:54

回答

0

是的,如果你有相同的種子,你會得到相同的隨機數,每次都是相同的順序。這是設計。當你想這樣做的例子:

  • 當測試一個程序時,你可以使用一個固定的種子,這樣你就可以得到相同的結果。
  • 如果您記錄程序中使用的種子,並且出現問題,那麼您可以確定結果隨機數,以便您可以嘗試重現該錯誤。
  • 如果要測量性能,可以使用固定種子,以便在不同運行時不會獲得不同的數據。

默認情況下(意思是當您指定沒有種子時)系統時間將被使用。這裏的一般想法是,你只需要一個「隨機」數字,使用這個數字就可以製作更多的「隨機」數字。如果你把當前的時間縮短到一些真正的非常小的精度水平,那麼它確實是非常隨機的。大多數情況下,只要您確定不會創建新實例Random(因此它們不具有相同的種子),就可以接受此默認行爲。你也可以通過更安全的算法生成一個隨機數,並將其作爲種子傳入。 (我見過的一個例子是創建一個新的GUID並將其作爲種子傳遞給它,這實際上是一個不錯的想法。)