将 std::random_device 与 pRNG(例如 std::mt19937)一起使用和不使用之间有什么区别?

Pat*_*ryk 5 c++ random prng c++11

在 C++11 中,可以使用std::random_device或不使用像 mt19937 这样的伪随机数生成器来生成数字。

在此示例代码中使用它会有什么区别:

#include <random>
#include <iostream>

int main() {
    std::random_device rd;
    std::mt19937 mt(rd());
    std::uniform_real_distribution<double> dist(1, 10);

    for (int i=0; i<16; ++i)
        std::cout << dist(rd) << "\t" << dist(mt) << "\n";
}
Run Code Online (Sandbox Code Playgroud)

Col*_*mbo 4

std::random_device应该可以为您提供像mt19937. 产生的连续数字的质量完全未定义,并且很容易不足以满足实际目的(例如密码学),因此依赖它是毫无问题的。

除此之外,mt19937当给予相同的种子时,会给你相同的序列。A random_devices 值只能受赋予其构造函数的字符串影响......这意味着实现定义的行为。