【问题标题】:How to generate a fixed "pseudo-random" list of doubles in a certain range the same every time?如何每次都在一定范围内生成固定的“伪随机”双打列表?
【发布时间】:2016-05-11 08:40:50
【问题描述】:

出于测试目的,我需要一个大约 10000 个值的固定列表(对列表大小没有严格限制),范围约为 -100 到 1000。这个列表必须适当地“随机”,没有值之间的明显增量/乘法差异。然而,每次我运行我的代码时,这个固定列表也必须完全相同。

如何在没有大量体力劳动的情况下创建这样的列表?


显然,如果列表不必每次都相同,那会容易得多,我可以简单地使用Random 库。如果是这种情况,即使是循环yield return; 具有像randonNum.Next(-50, 100) 这样的平均增加的变量增量可能是合适的,但显然每次我运行我的代码时,这样的实现都会改变。

【问题讨论】:

标签: c# math random


【解决方案1】:

诀窍是在创建随机值生成器时使用 seed

Random gen = new Random(1234); // or other integer seed

int size = 10000;

List<Double> result = Enumerable
  .Range(0, size)
  .Select(_ => gen.NextDouble() * 1100.0 - 100.0) // [-100..1000] range
  .ToList();

【讨论】:

    【解决方案2】:

    您可以使用Random-constructor with a seed-value 生成相同的数字,例如:

    var r = new Random(0);
    

    现在您可以在上面使用r.NextInt,并且应该会一次又一次地获得相同的数字。

    省略种子将导致当前系统时间的默认种子,它保证是唯一的,因此会导致不同的结果。提供一个常量将始终创建相等的序列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 2014-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多