使用'getrandom'在C ++中生成随机数

时间:2018-04-07 17:38:58

标签: c++ random

我想在c ++中使用随机数生成器来进行随机生成数字的数学测验。

我的问题是使用time(0)只能精确到一秒钟。在我正在使用的IDE中(NetBeans 8.2),将srand(time(0))悬停在消息上时会出现一条消息:

Image of the text

  

这是一个弱随机数发生器;它对于安全目的没有用。替代方案:getrandom(void * buf,size_t buflen,unsigned int flags); / dev / urandom;

我在网上找不到关于getrandom的任何内容。我想知道是否有人能够阐明getrandom的语法?怎么用?

1 个答案:

答案 0 :(得分:1)

您应该停止使用srand / rand,因为这些是生成随机数的旧方法。从C ++ 11开始,有一个random标准库:

#include <random>

std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(0, 100);

// To generate a number:
dis(gen);

快速解释:

std::rand也是pseudo-random number generator,但随机引擎是实现定义的,您需要使用srand对其进行初始化:

// Call srand once at the beginning of the program:
srand(time(0));

// Then you use rand() without (usually) calling srand() again:
rand();
rand(); 

但正如您所注意到的,std::time通常会返回几秒钟,因此如果您在一秒钟内运行两次程序,则可能会获得相同的输出。

getrandom是一个非标准函数(也许是POSIX?),现在random标准库可用,确实没有必要将它用于游戏。