【发布时间】:2013-09-23 17:02:23
【问题描述】:
我使用以下代码来测试 C++ <random> 库。
为什么每次运行已编译的可执行文件都得到完全相同的序列? rd() 在编译时是确定性的吗?如何为每次运行获得不同的输出?
Windows 7 64 位上的 GCC 4.8.1。使用来自 http://nuwen.net/mingw.html 的 MinGW 分发。
编辑:我用 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;
}
【问题讨论】:
-
请提供平台和编译器。这绝对应该不会发生,即使是
entropy() == 0。如果是这样,那就是一个错误。 -
@MM。不,
random_device不是这样工作的。 -
能否让编译器打印宏
_GLIBCXX_USE_RANDOM_TR1的内容?如果为 0,则使用带有固定种子的 mt19937 作为后备。 -
使用 gcc 4.9.2 的 mingw-w64 中仍然存在错误
-
有没有人尝试向 GCC 报告错误以便修复?还是要求太多?