【问题标题】:Why we can use srand(clock()) in c++?为什么我们可以在 C++ 中使用 srand(clock())?
【发布时间】:2018-11-19 16:40:36
【问题描述】:

srand(clock()) 在 C++ 中? 我以前学过一门c++课程,在那门课中我遇到了这个问题,但是我不知道这个函数在c++中的真正含义是什么?

【问题讨论】:

  • C++ 继承了 C 标准库。试试man srand ...不知道你所说的“时钟”是指std::chrono::*_clock吗?
  • @rmccabe3701 OP 更可能从<ctime> 标头引用clock
  • 请注意,rand(因此也包括srand)已被弃用。改用从 C++11 开始的<random>

标签: c++ c++11 visual-c++ c++-cli c++builder


【解决方案1】:

srand 是 C 标准库中定义的函数,它 将随机数生成器设置为某个起始种子。

随机数生成器生成子序列号的作用是获取当前输入并根据当前值应用一些计算。

具有给定已知起始种子的所有未来 rand() 调用实际上都是确定性的。这就是为什么它被称为“伪随机数生成器”。

因此,例如,如果您每次都使用 srand(100) 启动程序 - 并多次输出 rand() - 您每次运行的整个输出将是相同的。

现在 clock() 函数的作用是,它以毫秒为单位获取当前时间,并将其用作起始种子。

由于当前时间是不断变化的,而当前时间的毫秒数不是很容易确定在调用操作clock()的精确时间是什么,--这是一种好方法得到一个“随机”的启动种子。

编辑

clock() 实际上返回了程序消耗的处理器时间。

你可以看看How to get current timestamp in milliseconds since 1970 just the way Java gets

您需要小心“time.h”中定义的 time_t 时间(time_t* 计时器),因为它不能跨平台移植。

但不推荐使用此 srand 和 rand 函数,并且在定义随机类的 C++11 中已弃用。你可以看这里:http://en.cppreference.com/w/cpp/numeric/random

【讨论】:

    【解决方案2】:

    为什么我们可以使用 srand(clock())?因为,

    1. srand 初始化随机数序​​列。
    2. 不希望每次模拟都得到相同的结果。
    3. 时钟返回程序消耗的处理器时间。

      返回的值以时钟节拍表示。

    4. main() 开始运行时的细粒度和不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-23
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 2018-03-19
      • 2017-01-23
      • 1970-01-01
      相关资源
      最近更新 更多