种子srand()的最佳方法是什么?

Mat*_*att 6 c random srand

我学习的方法是初始播种随机数生成器,srand(time(NULL))然后使用调用rand()生成随机数.这种方法的问题是如果我在同一秒内多次运行我的程序,生成的随机数将始终相同.这有什么好办法?

R..*_*R.. 6

在POSIX系统上,用于clock_gettime获取当前时间(以纳秒为单位).如果你不需要很多位,你可以忘记PRNG并直接使用时间的低位作为随机数.:-)


Par*_*emp 1

除了使用时间之外,另一种常见的 rand 函数种子方法是使用程序的进程 ID,因为它保证是唯一的。

实际的代码是依赖于平台的,但如果你在 Windows 上,我相信你可以使用该函数GetCurrentProcessId(),如下所示

srand(GetCurrentProcessId());
Run Code Online (Sandbox Code Playgroud)

  • 这样,每次调用“rand”函数时,您都会得到相同的兰特数字序列。 (3认同)
  • @prehistoricpenguin,只有当你的进程每次都有相同的PID时。这就是为什么将它与时间函数混合是一个好主意。 (2认同)