gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:26:10 26 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/53145837/

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