gpt4 book ai didi

c - srand() — 为什么只调用一次?

转载 作者:太空狗 更新时间:2023-10-29 16:16:03 25 4
gpt4 key购买 nike

这个问题是关于这个问题中的评论 Recommended way to initialize srand?第一条评论说 srand() 应该在应用程序中只调用一次。为什么会这样?

最佳答案

这取决于您要实现的目标。

随机化是作为具有起始值的函数执行的,即种子

因此,对于相同的种子,您将始终获得相同的值序列。

如果您每次需要随机值时都尝试设置种子,并且种子是相同的数字,您将始终获得相同的“随机”值。

种子通常取当前时间,即秒数,如time(NULL),所以如果你总是在取随机数之前设置种子,你会得到相同的数字只要您在同一秒内多次调用 srand/rand 组合。

为了避免这个问题,每个应用程序只设置一次 srand,因为两个应用程序实例是否会在同一秒内初始化是值得怀疑的,因此每个实例都会有不同的随机数序列。

但是,您有可能会在一秒钟内多次运行您的应用程序(特别是如果它是一个简短的应用程序,或者命令行工具或类似的东西),那么您将不得不求助于其他方式选择种子(除非您可以在不同的应用程序实例中使用相同的序列)。但正如我所说,这取决于您的应用程序使用上下文。

此外,您可能想尝试将精度提高到微秒(尽量减少相同种子的机会),需要 (sys/time.h):

struct timeval t1;
gettimeofday(&t1, NULL);
srand(t1.tv_usec * t1.tv_sec);

关于c - srand() — 为什么只调用一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7343833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com