नीचे दिए गए कोड का मतलब अंतराल में पाँच छद्म यादृच्छिक संख्याओं की सूची तैयार करना है [1,100]। मैं बीज default_random_engineके साथ time(0), जिसमें सिस्टम का समय देता है, यूनिक्स समय । जब मैं Microsoft Visual Studio 2013 का उपयोग करके विंडोज 7 पर इस कार्यक्रम को संकलित और चलाता हूं, तो यह अपेक्षित (नीचे देखें) के रूप में काम करता है। जब मैं जी ++ कंपाइलर के साथ आर्क लिनक्स में ऐसा करता हूं, हालांकि, यह अजीब व्यवहार करता है।
लिनक्स में, हर बार 5 नंबर उत्पन्न होंगे। प्रत्येक निष्पादन पर अंतिम 4 संख्याएं भिन्न होंगी (जैसा कि अक्सर होता है), लेकिन पहली संख्या वही रहेगी।
विंडोज और लिनक्स पर 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
इस रहस्य को जोड़ते हुए, कि लिनक्स पर एक-एक करके पहली बार समय-समय पर वेतन वृद्धि। उपरोक्त आउटपुट प्राप्त करने के बाद, मैंने लगभग 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)?