【问题标题】:Random number seed targeting the same version of the .NET framework [duplicate]针对相同版本的.NET框架的随机数种子[重复]
【发布时间】:2012-07-23 19:44:53
【问题描述】:

可能重复:
Random number seed targeting the same version of the .NET framework

如果我的应用程序以 .NET 框架 3.5 为目标,每个 CPU 是否会基于相同的种子返回相同的随机序列?我想知道你是否得到和我一样的结果。我也希望我分发我的应用程序的每个人也能得到相同的结果。谢谢!

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

【问题讨论】:

  • 那不会是随机的吧?
  • 你不应该依赖这个返回相同的值——即使在你自己的系统上——即使它现在可能会这样做。如果 Microsoft 向 .NET 发布了一个补丁来改变行为,那么你的代码将会中断,你将很难追踪它,
  • 我认为我们应该通过编辑重新打开另一个问题。马克对此有深思熟虑的回答。
  • 另外,请不要转发您的问题 - 编辑原件。
  • @ChrisF 他做到了,它需要重新打开。

标签: c# random


【解决方案1】:

是的,如果您有相同的种子,您每次都会以相同的顺序获得相同的随机数。这是设计使然。您何时想要这样做的示例:

  • 在测试程序时,您可以使用固定种子,以便获得相同的结果。
  • 如果您记录程序中使用的种子并且遇到问题,则可以确定生成的随机数,以便尝试重现错误。
  • 如果您想衡量性能,您可以使用固定种子,这样您就不会在不同的运行中获得不同的数据。

默认情况下(即当您不指定种子时)将使用系统时间。这里的一般想法是,你取一个“随机”数字,使用它,你可以制作更多的“随机”数字。如果您将当前时间降低到非常非常小的精度水平,那么它实际上是随机的。大多数情况下,这种默认行为对您来说是可以接受的,只要您确保不要创建Random 的新实例太靠近(以使它们没有相同的种子)。您还可以通过更安全的算法生成一个随机数,并将其作为种子传递。 (我见过人们做的一个例子是创建一个新的 GUID 并将其作为种子传递。这实际上是一个不错的想法。)

【讨论】:

    猜你喜欢
    • 2012-07-22
    • 2010-09-07
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多