如何每次都生成一定范围内的固定“伪随机”双打列表
本文关键字:随机 伪随机 列表 何每次 范围内 | 更新日期: 2023-09-27 18:32:50
出于测试目的,我需要大约 10000 个值的固定双精度列表(对列表大小没有严格限制),大约在 -100 到 1000 范围内。此列表必须是适当的"随机",值之间没有明显的增量/乘法差异。但是,每次运行代码时,此固定列表也必须完全相同。
如果没有大量的体力劳动,我怎么能创建这样的列表?
显然,如果列表不必每次都相同,那会容易得多,我可以简单地使用Random
库。如果是这种情况,即使是具有可变增量的循环yield return;
,其平均增加量也像randonNum.Next(-50, 100)
一样可能是合适的,但显然每次我运行代码时,这样的实现都会发生变化。
诀窍是在创建随机值生成器时使用种子:
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();
您可以使用带有种子值的 Random
-构造函数生成相同的数字,例如:
var r = new Random(0);
现在您可以在其上使用r.NextInt
,并且应该一次又一次地获得相同的数字。
省略种子将导致当前系统时间的默认种子,该种子保证是唯一的,因此将导致不同的结果。提供一个常量将始终创建相等的序列。