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

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

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

int main()
{
    srand(time(0));
    cout << rand();
    return 0;
}

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

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

回答

从文档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';


以上是带有rand的Cpp随机数返回非常相似的数字的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>