首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我每次使用mingwgcc4.8.1运行std::random_device都会得到相同的序列?

为什么我每次使用mingwgcc4.8.1运行std::random_device都会得到相同的序列?
EN

Stack Overflow用户
提问于 2013-09-19 03:27:12
回答 5查看 20K关注 0票数 70

我使用以下代码测试C++ <random>库。

为什么每次运行编译后的可执行文件都会得到完全相同的序列?rd()在编译时是确定性的吗?如何在每次运行中获得不同的输出?

64位Windows 7上的GCC 4.8.1。使用来自http://nuwen.net/mingw.html的MinGW发行版。

编辑:我用Visual Studio测试了同样的代码。没有问题。输出是不确定的。这可能是我使用的名为gcc 4.8.1版本中的一个bug。

代码语言:javascript
复制
#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;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-09-19 03:28:57

来自http://en.cppreference.com/w/cpp/numeric/random/random_device

注意,如果不确定性源(例如,硬件设备)对于实现不可用,则可以按照伪随机数引擎来实现std::random_device。

不过,我希望一个好的实现至少能为RNG提供种子。

编辑:我怀疑他们故意选择每次发送相同的序列,以清楚地表明流并不像承诺的那样随机。

票数 34
EN

Stack Overflow用户

发布于 2013-09-20 10:43:49

我从STL from MSFT那里得到了一个肯定的答案

与VC不同的是,GCC并没有在Windows上不确定性地实现random_device。Boost有,所以你可以使用Boost.Random。

票数 26
EN

Stack Overflow用户

发布于 2014-09-16 13:42:49

您可能需要向构造函数传递一个参数:

https://gcc.gnu.org/onlinedocs/gcc-4.9.1/libstdc++/api/a00899.html

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18880654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档