用于 c++ 中函数 rand() 的公式

Formula used for function rand() in c++

本文关键字:rand c++ 函数 用于      更新时间:2023-10-16

我想知道在C++中使用rand()函数生成随机数的公式是什么。起初,我虽然它每次都会返回随机数,但事实并非如此。

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    cout << "Hello world!" << endl;
    srand(9865);
    cout << rand() << "n";
    return 0;
}

在这里,我想,也许是因为给定的种子编号和那个未知的公式,它将显示相同的数字。

但是,当我删除"srand(9865);"并执行几次时,它只显示"41"作为输出。请解释一下这里发生了什么。

来自 http://linux.die.net/man/3/rand

"如果未提供种子值,则 rand() 函数将自动设定值为 1. "和 "..这些序列可以通过调用具有相同种子值的 srand() 来重复。"

每次都必须用非静态种子为随机函数播种。一个简单但不那么准确的解决方案是用时钟播种:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    cout << "Hello world!" << endl;
    srand(time(NULL));
    cout << rand() << "n";
    return 0;
}

库规范没有规定随机数生成器的公式(这取决于实现)。唯一指定的是可以通过srand控制事物以实现一致的伪随机生成:

为了生成类似随机的数字,srand 通常被初始化为一些独特的运行时值,例如函数 time 返回的值(在标头 中声明)。这对于大多数琐碎的随机化需求来说足够独特。

所以:

  1. 如果使用给定种子初始化srand,则以下rand调用将在运行中保持一致。

  2. 如果使用基于时间的种子初始化srand,则以下rand调用几乎肯定会在运行中有所不同。

  3. 如果不初始化srand,以下对rand的调用将使用默认的初始种子。


请注意,在当代C++中,您应该避免使用这些古老的函数。请参阅此问题的答案。