Наведений нижче код призначений для створення списку з п’яти псевдовипадкових чисел в інтервалі [1100]. Я Насіння default_random_engine
з time(0)
, яка повертає системний час в UNIX час . Коли я компілюю та запускаю цю програму в Windows 7 за допомогою Microsoft Visual Studio 2013, вона працює належним чином (див. Нижче). Однак, коли я це роблю в Arch Linux із компілятором g ++, це поводиться дивно.
У Linux щоразу буде генеруватися 5 чисел. Останні 4 числа будуть різними при кожному виконанні (як це часто буває), але перше число залишатиметься незмінним.
Приклад результату з 5 виконань у Windows та Linux:
| 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 хвилин і знову спробував виявити, що 1-е число змінилося і тепер завжди генерується як 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 system_time = time(0);
default_random_engine e(system_time);
uniform_int_distribution<int> 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;
}
sizeof(time_t)
протиsizeof(default_random_engine::result_type)
?