我的程序每次执行时如何生成不同的随机数?
我正在尝试执行以下程序
#include <random>
#include <iostream>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 100);
//Matrix 8x4 size declaration
int16_t **mtr = new int16_t*[8];
for (size_t i = 0; i < 8; i++) {
mtr[i] = new int16_t[4];
for (size_t j = 0; j < 4; j++)
mtr[i][j] = dis(gen);
}
//... more code
}
一切正常,但是每次执行此程序时,生成的数字都是相同的。我尝试使用<ctime>
库,它可以正常工作(我知道它是不安全的...)
注意:执行是指每次我调用可执行文件
答案 0 :(得分:1)
https://en.cppreference.com/w/cpp/numeric/random/random_device
如果不确定性源(例如,硬件设备)不可用于实现,则可以根据实现定义的伪随机数引擎来实现
std::random_device
。在这种情况下,每个std::random_device
对象都可以生成相同的数字序列。
因此,显然您对std::random_device
的实现是伪随机的。
如果可以的话,请传递更好的内容,而不要在这里传递rd()
std::mt19937 gen(rd());