3

如果我的应用程序以 .NET 框架 3.5 为目标,每个 CPU 是否会基于相同的种子返回相同的随机序列?我正在检查您是否得到与我相同的结果。我也希望我分发我的应用程序的每个人都能得到相同的结果。谢谢!

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

1 回答 1

6

对于特定的框架版本,由于固定的种子,您的程序每次运行时都应该给出相同的结果。

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

例如,在 .NET 4.0 上,我得到77. 但是将代码放入ideone(使用 Mono)会给出67.

这种差异的原因是因为使用的精确算法Random不是规范的一部分。该文档包含有关该算法的以下信息:

Random 类的当前实现基于 Donald E. Knuth 的减法随机数生成器算法的修改版本。有关详细信息,请参阅 DE Knuth。“计算机编程的艺术,第 2 卷:半数值算法”。Addison-Wesley,马萨诸塞州雷丁,第二版,1981 年。

...

不保证Random 类中的随机数生成器的实现在 .NET Framework 的主要版本中保持不变。因此,您的应用程序代码不应假定相同的种子会在不同版本的 .NET Framework 中产生相同的伪随机序列。

强调我的。不能保证未来的实现将使用相同的算法。

于 2012-07-23T19:26:14.400 回答