【问题标题】:Random number seed targeting the same version of the .NET framework针对相同版本的 .NET 框架的随机数种子
【发布时间】:2012-07-22 01:48:05
【问题描述】:

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

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

【问题讨论】:

  • 每次使用具有相同种子的 Random 对象时,都会得到相同的随机序列。
  • 如果你真的想知道...77
  • 伙计们,我想你们误解了他想问的问题。
  • 我也得到了 77。这是个好消息!多谢你们!但是不同的 .net 框架工作版本呢?

标签: c# random


【解决方案1】:

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

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

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

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

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

...

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

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

【讨论】:

  • OP 问题中没有“mono”标签。
  • @Oscar 是否标记为 mono 似乎与我无关——关键是不同的(当前或未来)实现可能会返回不同的结果。
猜你喜欢
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多