如果我的应用程序以 .NET 框架 3.5 为目标,每个 CPU 是否会基于相同的种子返回相同的随机序列?我正在检查您是否得到与我相同的结果。我也希望我分发我的应用程序的每个人都能得到相同的结果。谢谢!
Random a = new Random(44448);
int i1 = a.Next(65, 90);
MessageBox.Show(i1.ToString());
对于特定的框架版本,由于固定的种子,您的程序每次运行时都应该给出相同的结果。
但它可以在不同版本的 .NET 框架上给出不同的结果。
例如,在 .NET 4.0 上,我得到77
. 但是将代码放入ideone(使用 Mono)会给出67
.
这种差异的原因是因为使用的精确算法Random
不是规范的一部分。该文档包含有关该算法的以下信息:
Random 类的当前实现基于 Donald E. Knuth 的减法随机数生成器算法的修改版本。有关详细信息,请参阅 DE Knuth。“计算机编程的艺术,第 2 卷:半数值算法”。Addison-Wesley,马萨诸塞州雷丁,第二版,1981 年。
...
不保证Random 类中的随机数生成器的实现在 .NET Framework 的主要版本中保持不变。因此,您的应用程序代码不应假定相同的种子会在不同版本的 .NET Framework 中产生相同的伪随机序列。
强调我的。不能保证未来的实现将使用相同的算法。