总结: 我需要一种简单的自包含方式来为我的 RNG 播种,以便每次启动程序时种子都不同。
细节:
我经常需要多次运行相同的程序(使用随机数进行计算,例如蒙特卡洛模拟等)以获得对结果的良好统计。在这种情况下,重要的是随机数生成器在每次运行时都有不同的种子。
我想为此提供一个简单的跨平台解决方案,该解决方案可以包含在程序本身中。(即,我不想总是麻烦地让一个脚本用不同的种子参数启动程序的每个实例。)
请注意,使用time(0)
作为种子不是一个好的解决方案,因为计时器分辨率很差:如果并行启动多个进程,它们很可能从time(0)
.
要求:
- 尽可能简单
- 跨平台(目前我需要它在 Windows 和 Linux、x86 和 x64 上工作)。
- 自包含:不应该依赖于启动程序的特殊方式(将种子作为参数从启动脚本传递太麻烦)。
- 我想将整个东西包装到一个小库中,我可以毫不费力地将其包含在任何新项目中,并且只需执行类似的操作
SeedMyRNG(getSeed());
编辑:
尽管我的主要问题是关于在 C(或 C++)中执行此操作,但基于我发现os.urandom()
的作为 Python 解决方案的答案中提供的指针(这对我也很有用)。
相关的相关问题:如何在 C 中使用 /dev/random 或 urandom?