【问题标题】:use of srand() in c++在 C++ 中使用 srand()
【发布时间】:2011-04-11 10:45:01
【问题描述】:

我是 C++ 新手,所以这个疑问可能看起来很基本,但我不明白 rand() 和 srand() 之间的区别,你所说的 srand() 中的“种子”是什么意思? 当我写 srand(time(NULL)) 时,它会做什么来生成随机数, time(NULL) 在这里做什么?还有,这是什么? 提前致谢

【问题讨论】:

    标签: c++


    【解决方案1】:

    rand() 不会产生随机数 - 它使用一些非常简单的公式来计算下一个“随机值”,基于其存储的内部状态,每次生成随机值时都会发生变化。 srand() 设置该内部状态。

    通过这种方式,您可以获得可复制的数字集 - 您使用给定值调用 srand(),然后 rand() 生成一组值。当您下次启动程序并使用完全相同的值调用srand() 时,rand() 将产生完全相同的一组值。这对模拟很有用。

    调用srand( time( NULL ) ) 会使您的程序生成一组值,这些值取决于当前时间,因此是不可再现的 - 每次重新启动程序时都会生成一组新数字。

    【讨论】:

    • NULL在时间上代表什么(NULL)?
    • @Frustrated Coder:请参阅此(或任何其他)描述 - cplusplus.com/reference/clibrary/ctime/time - NULL 是存储当前时间的地址,意思是“不存储当前时间”。
    【解决方案2】:

    随机数生成器需要一个数字(称为种子)来生成随机数。如果给随机数生成器相同的种子,那么每次它都会生成相同的随机数序列。例如:-

    如果您运行程序并且它正在生成随机序列 2,78,45,60 。 如果您第二次运行该程序,您将再次得到相同的序列 2,78,45,60。

    srand 函数用于更改随机数生成器的种子。通过设置 srand(time(NULL)) ,您将随机数生成器的种子设置为当前时间。每次运行时都这样做程序你会得到不同的随机序列:-

    例如,如果您获得 2,78,45,60,则对于第一次运行。 下次你可能会得到 5,3,6,80(取决于当前时间,因为自上次运行以来时间已更改,种子已更改)

    有关更多信息,请参阅以下内容:-

    http://www.cplusplus.com/reference/clibrary/cstdlib/rand/

    http://www.cplusplus.com/reference/clibrary/cstdlib/srand/

    http://www.cplusplus.com/reference/clibrary/ctime/time/

    【讨论】:

      猜你喜欢
      • 2014-05-01
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 2023-03-09
      • 2014-12-28
      相关资源
      最近更新 更多