针对相同版本的.NET框架的随机数种子
如果我的应用程序面向.NET框架3.5,每个CPU是否会返回基于相同种子的相同随机序列?我正在检查你是否得到和我一样的结果。我也希望每个我分发我的应用程序的人都会得到相同的结果。谢谢!针对相同版本的.NET框架的随机数种子
Random a = new Random(44448);
int i1 = a.Next(65, 90);
MessageBox.Show(i1.ToString());
对于特定的框架版本,由于固定的种子,每次运行程序时都应该给出相同的结果。
但它可以在不同版本的.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中产生相同的伪随机序列。
强调我的。没有保证未来的实现将使用相同的算法。
OP问题中没有“单声道”标签。 – 2012-07-23 19:33:11
@Oscar无论它是否被标记为“单声道”似乎与我无关 - 关键是不同的(当前或未来)实现可能会返回不同的结果。 – Adam 2012-07-23 20:04:42
每次使用具有相同种子的Random对象时,都会得到相同的随机序列。 – poussma 2012-07-23 19:23:31
http://csharpindepth.com/Articles/Chapter12/Random.aspx – Oded 2012-07-23 19:24:21
如果你*真的*想知道...'77' – mellamokb 2012-07-23 19:24:28