带有 rand 的 Cpp 随机数返回非常相似的数字

omE*_*han 1 c++ random random-seed

我正在尝试使用 rand() 命令生成一个随机数,但每次我都会得到非常相似的数字。这是我的代码:

#include <iostream>
#include <time.h>
using namespace std;

int main()
{
    srand(time(0));
    cout << rand();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我跑了 5 次,得到的数字是:21767 21806 21836 21862 21888

我怎样才能使数字更加不同?

Fan*_*Fox 6

文档rand

无法保证生成的随机序列的质量。过去,rand() 的一些实现在产生的序列的随机性、分布和周期方面存在严重缺陷(在一个众所周知的例子中,低位在调用之间简单地在 1 和 0 之间交替)。 rand() 不推荐用于严重的随机数生成需求。推荐使用C++11的随机数生成工具来代替rand()。

它(和我)建议在<random>.

在您的特定情况下,您似乎想要一个std::uniform_int_distribution. 链接页面上给出的示例是:

std::random_device rd;  //Will be used to obtain a seed for the random number engine
std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()
std::uniform_int_distribution<> distrib(1, RAND_MAX);
std::cout << distrib(gen) << '\n';
Run Code Online (Sandbox Code Playgroud)