gpt4 book ai didi

c - C 中 srand 函数中种子的用途是什么?

转载 作者:行者123 更新时间:2023-11-30 21:22:44 26 4
gpt4 key购买 nike

我不明白 C 语言中 srand 函数中种子的用途。有人可以向我解释一下吗?我知道 srand 用于在每次运行程序时生成随机数(与每次运行时生成相同随机数的 rand() 不同)。

最佳答案

srand 和传递给它的种子的目的是让您控制rand 生成的序列。

srand初始化了rand使用的数据,因此它决定了rand生成的数字序列是什么。您可以使用它来选择是否生成序列(您之前未生成的序列)或重复序列(您之前生成的序列)。

例如,假设您有某种模拟,并且需要随机数来选择该模拟的某些输入,例如客户何时到达或哪些粒子进入系统。为此,您只需重复使用 rand 即可生成数字。模拟完成后,您可能希望再次运行它,以查看模拟由于其输入的有效随机变化而如何变化。但是,如果再次运行模拟程序,它的行为方式将完全相同,因为如果不调用 srand ,则 rand 始终会生成完全相同的序列。 p>

因此,为了每次生成不同的序列,程序可以调用 srand 并向其传递不同的种子。通常,标准time例程返回的当前时间被用作种子。然而,任何在程序的不同运行中选择不同值的方法都可以达到此目的。 (请注意,time(NULL) 通常返回秒数,因此连续快速执行两次使用 srand(time(NULL)) 的程序将导致相同的结果如果程序的两次执行在同一秒内开始,则使用的数字序列。)

为种子传递哪个值并不重要,重要的是它与其他实例不同。之所以无所谓,是因为一个好的随机数生成器使用复杂且设计良好的函数将种子转换为随机数生成器的状态并计算生成的数字,而这种设计使得种子的选择变得困难对生成的数字产生任何故意影响。

另一方面,有时您想重复一个序列。也许一次模拟运行做了一些有趣的事情,您想更详细地研究它。或者您想向同事提供该程序以及重现结果所需的所有数据。或者程序有一个仅在某些时候才会出现的错误,因此您需要在调试时准确地重复执行。在这些情况下,您将在每次执行中将相同的种子传递给 srand ,以便重现生成的数字的相同序列。

在我使用不同种子的程序中,例如 time(NULL),我让程序写入它用于输出的种子,这样,如果用户稍后希望使用同样的顺序,他们可以使用命令行开关(也内置于程序中)将该种子传递给程序,指定使用该种子。

关于c - C 中 srand 函数中种子的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51935893/

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