深入理解 C++ 中的 rand() 和 srand()

C++ 中的 INLINECODE20dc6306 是一个内置函数,通常用于生成一系列随机数。它会生成一个位于 0, RANDMAX) 范围内的随机数,其中 RAND_MAX 是一个常量,其默认值可能因实现而异,但保证至少为 32767。

语法

INLINECODE24e954ee 函数定义在 INLINECODE42eef568 头文件中。

rand();

该函数不接受任何参数,并返回一个位于 [0, RAND_MAX) 范围内的伪随机数。

rand() 示例

#include 
using namespace std;

int main() {
    for (int i = 0; i < 3; i++)
    
        // 生成随机数
        cout << rand() << endl;
    return 0;
}

输出

1804289383
846930886
1681692777

INLINECODEc175f446 函数生成的随机数是通过一种算法计算的,该算法以 1 作为起始点或种子(seed),产生一系列看似不相关的数字。正因如此,对于不同的函数调用,如果我们不干预,这个随机数序列将总是相同的。为了解决这个问题,我们使用 INLINECODEca852388 函数。

srand() 函数的作用是改变算法的“种子”或起始点。种子 是一个整数,用于初始化随机数生成器。

语法

srand(seed);

其中,INLINECODE6817b95e 是一个整数值,用作 INLINECODE5563e2ea 函数的随机数生成器的种子。该函数不返回任何值。

示例

对于种子,我们在 srand() 函数中主要使用 当前时间,以确保每次运行程序时都能得到不同的随机数序列。

#include 
using namespace std;

int main() {

    // 使用当前时间作为随机数生成器的种子
    srand(time(0));
    for (int i = 0; i < 3; i++)
        cout << rand() << endl;
    return 0;
}

输出

582797172
409020522
244217599

现代 C++ 中的随机数生成

INLINECODEe10b46aa 和 INLINECODE7d4076cb 函数是 C++ 从 C 语言继承而来的。它们使用确定性算法来计算下一个随机数。这意味着对于相同的种子,它每次都会生成相同的数字序列。

为了提供高质量的随机性,C++ 11 引入了 [INLINECODEe8a7d786 库,其中包含了更复杂的随机数生成引擎,例如 INLINECODE05000752 引擎。该引擎虽然也使用确定性序列生成器,但其算法更为精密,且能提供均匀分布。当我们使用 INLINECODE95d89f60(如果操作系统支持,它能提供真正的非确定性随机种子值)为其设定种子时,它几乎可以保证比 INLINECODEc5045876 具有更好的随机性。

C++ 中 rand() 的应用

rand() 函数主要用于在程序中生成随机数,可应用于以下场景:

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/36730.html
点赞
0.00 平均评分 (0% 分数) - 0