针对相同版本的.NET框架的随机数种子



如果我的应用程序以.NET framework 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的减法随机数生成器算法的修改版本。有关更多信息,请参阅D.E.Knuth。"计算机程序设计艺术,第2卷:半数值算法"。Addison Wesley,马萨诸塞州雷丁市,1981年第二版。

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

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

最新更新