std :: mt19937生成器每次执行都返回相同的值,为什么?

时间:2020-03-18 04:21:41

标签: c++ random

我的程序每次执行时如何生成不同的随机数?

我正在尝试执行以下程序

#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>库,它可以正常工作(我知道它是不安全的...)

注意:执行是指每次我调用可执行文件

1 个答案:

答案 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());