2012-07-23 56 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

相关问题