[英]Using 'getrandom' to generate random number in C++
我想在 C++ 中使用隨機數生成器來使用隨機生成的數字進行數學測驗。
我的問題是使用time(0)
只能精確到一秒。 在我使用的 IDE (NetBeans 8.2) 中,將srand(time(0))
懸停在srand(time(0))
上時會出現一條消息:
這是一個弱隨機數生成器; 它對安全目的沒有用。 替代方案:getrandom(void *buf,size_t buflen, unsigned int flags);/dev/urandom;
我在網上找不到關於getrandom
任何信息。 我想知道是否有人可以對getrandom
的語法有所getrandom
? 如何使用它?
您應該停止使用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::random_device
是一個隨機生成器,可以產生非確定性隨機數。std::mt19937
是Mersenne Twister 引擎的特定實例,用於生成偽隨機數。std::uniform_int_distribution
是均勻數分布。 在這里,我生成了 0 到 100(包括在內)之間的數字。 std::rand
也是一個偽隨機數生成器,但隨機引擎是實現定義的,你需要使用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
標准庫可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.