linux排序与windows相同,在Linux中生成相同的数字,但在Windows中生成相同的数字

下面的代码旨在生成间隔为[1,100]的五个伪随机数的列表。我为default_random_enginewith设置了种子time(0),它以unix时间返回系统时间。当我使用Microsoft

Visual Studio 2013在Windows 7上编译并运行该程序时,它会按预期运行(请参阅下文)。但是,当我在Arch Linux中使用g

++编译器执行此操作时,它的行为就很奇怪。

在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

更令人迷惑的是,在Linux上,第一个数字会定期增加一个。获得上述输出后,我等待了大约30分钟,然后再次尝试发现第一个数字已更改,现在始终生成为26。它一直定期递增1,现在为32。它似乎对应随着价值的变化time(0)。

为什么第一个数字在每次运行中很少改变,然后又增加1?

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

#include

#include

#include

using namespace std;

int main()

{

const int upper_bound = 100;

const int lower_bound = 1;

time_t system_time = time(0);

default_random_engine e(system_time);

uniform_int_distribution u(lower_bound, upper_bound);

cout << '#' << '\t' << "system time" << endl

<< "-------------------" << endl;

for (int counter = 1; counter <= 5; counter++)

{

int secret = u(e);

cout << secret << '\t' << system_time << endl;

}

system("pause");

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值