【发布时间】:2010-07-25 14:24:51
【问题描述】:
我希望能够做这样的事情(显然不是有效的 C++):
rng1 = srand(x)
rng2 = srand(y)
//rng1 and rng2 give me two separate sequences of random numbers
//based on the srand seed
rng1.rand()
rng2.rand()
有没有办法在 C++ 中做这样的事情?例如,在 Java 中,我可以使用我想要的种子创建两个 java.util.Random 对象。 C++ 中似乎只有一个全局随机数生成器。我确定有提供此功能的库,但无论如何只用 C++ 来完成它?
【问题讨论】:
-
既然
rand返回的数字是(伪)随机的,为什么需要不止一个生成器呢?从一个随机数生成器中获取 2n 个数应该与从两个随机数生成器中的每一个中获取 n 个数的结果相似。 -
@James:考虑一个排队模拟,其中一个随机源控制新任务的到达,另一个随机源影响完成每个任务的时间。人们可能希望多次重复每个实验,复制“任务到达”场景,但使用不同的“任务完成”统计数据,这需要多个可以独立播种的 RNG。
-
@Jim:我同意它可以用于此目的。我认为手动输入“随机”数据比依赖 PRNG 更好。
-
@Jim:确实是用来模拟排队系统的。 @James:模拟有 10^6 个事件。我不会手动输入数据:)
-
@James:使用确定性种子 PRNG 作为可重现的、名义上无限的随机“流”是很常见的。手动准备的流没有我能想到的优势。