【问题标题】:Generating a series of random numbers?生成一系列随机数?
【发布时间】:2011-03-09 16:56:01
【问题描述】:

(我搜索了一下,没有看到重复的。如果有的话,我提前道歉。)

我需要重复调​​用执行某些模拟的方法。此方法接受几个静态变量作为参数,并返回从随机数 (double) (0.01 - 100.00) 派生的计算结果。

但是,鉴于 Random 类构造函数的种子基于当前系统时间,如果我连续调用该方法 25 次,我可以得到 75.01 作为所有 25 次的结果。

有没有一种相对简单的方法可以在每次方法调用时获得几乎保证的不同数字?

我怀疑这有点容易完成,我只是不知所措。

谢谢!

【问题讨论】:

标签: c# .net-3.5 random


【解决方案1】:

保留Random 类的实例,并在每次需要新随机数时调用NextDouble。您不会重复获得相同的号码。

【讨论】:

  • 这很明显。谢谢!
  • @Ian P:不用担心。我似乎记得 .net 中的 Random 类的行为与我第一次使用它时的预期不同。
【解决方案2】:

假设你已经证明你的程序每次调用都能得到 75.01(或类似的值)......

如果您担心构造函数中的播种,您最好的选择可能是只创建一个 Random 实例,而不是为每个函数调用创建一次(这听起来像是当前正在发生的事情)。该实例可能必须是静态和私有的......

【讨论】:

    【解决方案3】:

    前几天我遇到了同样的问题,我正在重新初始化我的随机对象并获取重复数据。只初始化对象一次,并在程序的整个生命周期中使用它。

    【讨论】:

      【解决方案4】:

      这是 C# 中 linkMersenne Twister 算法的实现。你应该可以很快得到它

      【讨论】:

        【解决方案5】:

        如果您的代码对时间不太敏感(在该块上),您可以在调用随机函数之间提供 2 毫秒或 3 毫秒的延迟。

        HTH!

        【讨论】:

          猜你喜欢
          • 2014-11-26
          • 2021-08-21
          • 1970-01-01
          • 1970-01-01
          • 2013-04-22
          • 2023-01-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多