相关疑难解决方法(0)

<random>在Linux中生成相同的编号,但在Windows中不生成

下面的代码用于生成区间[1,100]中的五个伪随机数的列表.我播种default_random_enginewith time(0),它在unix时间内返回系统时间.当我使用Microsoft Visual Studio 2013在Windows 7上编译和运行此程序时,它按预期工作(见下文).但是,当我使用g ++编译器在Arch Linux中这样做时,它表现得很奇怪.

在Linux中,每次都会生成5个数字.最后4个数字在每次执行时都会有所不同(通常情况就是如此),但第一个数字将保持不变.

Windows和Linux上5次执行的示例输出:

      | Windows:       | Linux:        
---------------------------------------
Run 1 | 54,01,91,73,68 | 25,38,40,42,21
Run 2 | 46,24,16,93,82 | 25,78,66,80,81
Run 3 | 86,36,33,63,05 | 25,17,93,17,40
Run 4 | 75,79,66,23,84 | 25,70,95,01,54
Run 5 | 64,36,32,44,85 | 25,09,22,38,13
Run Code Online (Sandbox Code Playgroud)

除此之外,第一个数字在Linux上定期递增1.在获得上述输出后,我等了大约30分钟并再次尝试发现第一个数字已经改变,现在总是以26为单位生成.它继续定期增加1,现在是32.它似乎对应随着价值的变化time(0).

为什么第一个数字很少在运行中发生变化,然后在运行时,增加1?

代码.它整齐地打印出5个数字和系统时间:

#include <iostream>
#include <random>
#include <time.h>

using namespace std;

int main()
{
    const int upper_bound = 100;
    const int lower_bound = 1;

    time_t …
Run Code Online (Sandbox Code Playgroud)

c++ linux windows gcc visual-studio-2013

88
推荐指数
2
解决办法
6934
查看次数

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

我使用以下代码来测试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;
}
Run Code Online (Sandbox Code Playgroud)

c++ random stl c++11

66
推荐指数
3
解决办法
2万
查看次数

标签 统计

c++ ×2

c++11 ×1

gcc ×1

linux ×1

random ×1

stl ×1

visual-studio-2013 ×1

windows ×1