簡體   English   中英

在 C++ 中使用“getrandom”生成隨機數

[英]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::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM