我使用以下代码来测试C++<random>
图书馆。
为什么每次运行已编译的可执行文件时都会得到完全相同的序列?是rd()
编译时确定性?如何为每次运行获得不同的输出?
Windows 7 64 位上的 GCC 4.8.1。使用 MinGW 发行版http://nuwen.net/mingw.html.
EDIT:我使用 Visual Studio 测试了相同的代码。没有问题。输出是不确定的。这可能是我使用的 mingw gcc 4.8.1 中的一个错误。
#include <iostream>
#include <random>
using namespace std;
int main(){
random_device rd;
mt19937 mt(rd());
uniform_int_distribution<int> dist(0,99);
for (int i = 0; i< 16; ++i){
cout<<dist(mt)<<" ";
}
cout <<endl;
}
From http://en.cppreference.com/w/cpp/numeric/random/random_device:
请注意,如果非确定性源(例如硬件设备)不可用于实现,则 std::random_device 可以根据伪随机数引擎来实现。
我希望一个体面的实施至少能够为 RNG 带来种子。
Edit:我怀疑他们故意选择每次提供相同的序列,以表明流并不像承诺的那样随机。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)