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

3

如果我的应用程序针对.NET Framework 3.5,那么每个CPU是否会根据相同的种子返回相同的随机序列? 我正在检查是否与我获得相同的结果。 我也希望我分发给的每个人都能获得相同的结果。谢谢!

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

3
如果您每次使用相同的种子(seed)来创建一个Random对象,您将会得到完全相同的随机数序列。 - poussma
1
http://csharpindepth.com/Articles/Chapter12/Random.aspx - Oded
1
伙计们,我觉得你们误解了他想问的问题。 - Yuriy Faktorovich
@ZNK-M - 这并不一定正确。不同版本的.NET框架将导致不同的值集,因为Random算法是一个实现细节,可能会在任何版本中更改。 - John Rasch
1
我也得到了77。这是个好消息!谢谢大家!但是不同的.NET框架版本呢? - News Reader
显示剩余5条评论
1个回答

6

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

但是在不同版本的.NET框架上可能会给出不同的结果。

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

造成这种差异的原因是Random使用的精确算法不是规范的一部分。文档中有关于算法的信息:

“当前”实现的Random类基于Donald E. Knuth的减法随机数生成器算法的修改版本。更多信息请参见D.E. Knuth的《计算机程序设计艺术,第2卷:半数值算法》。Addison-Wesley,Reading,MA,第二版,1981年。
...
Random类中随机数生成器的实现不保证在.NET Framework的主要版本之间保持相同。因此,您的应用程序代码不应假定在.NET Framework的不同版本中使用相同的种子将导致相同的伪随机序列。”
重点是我的。未来的实现不保证使用相同的算法。

OP的问题中没有“mono”标签。 - Oscar Jara
4
我认为它是否被标记为“单声道”对我来说并不重要——关键是不同的(现有或未来的)实现可能会返回不同的结果。 - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接