2012-07-23 65 views
2

如果我的應用程序面向.NET框架3.5,每個CPU是否會返回基於相同種子的相同隨機序列?我正在檢查你是否得到和我一樣的結果。我也希望每個我分發我的應用程序的人都會得到相同的結果。謝謝!針對相同版本的.NET框架的隨機數種子

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

每次使用具有相同種子的Random對象時,都會得到相同的隨機序列。 – poussma 2012-07-23 19:23:31

+1

http://csharpindepth.com/Articles/Chapter12/Random.aspx – Oded 2012-07-23 19:24:21

+0

如果你*真的*想知道...'77' – mellamokb 2012-07-23 19:24:28

回答

5

對於特定的框架版本,由於固定的種子,每次運行程序時都應該給出相同的結果。

但它可以在不同版本的.NET框架上給出不同的結果。

例如,在.NET 4.0上,我得到77。但是將代碼放入ideone(使用Mono)給出67

造成這種差異的原因是因爲Random使用的精確算法不是規範的一部分。該documentation有大約算法這樣的信息:

當前實現Random類是基於唐納德·E·Knuth的消減隨機數生成算法的修改版本。欲瞭解更多信息,請參閱D. E. Knuth。 「計算機編程的藝術,第2卷:研究數學算法」。 Addison-Wesley出版社,閱讀,MA,第二版,1981年

...

隨機數發生器的Random類的實現不能保證整個.NET的主要版本保持不變框架。因此,您的應用程序代碼不應該假定相同的種子將在不同版本的.NET Framework中產生相同的僞隨機序列。

強調我的。沒有保證未來的實現將使用相同的算法。

+0

OP問題中沒有「單聲道」標籤。 – 2012-07-23 19:33:11

+4

@Oscar無論它是否被標記爲「單聲道」似乎與我無關 - 關鍵是不同的(當前或未來)實現可能會返回不同的結果。 – Adam 2012-07-23 20:04:42