नीचे दिए गए कोड का मतलब अंतराल में पाँच छद्म यादृच्छिक संख्याओं की सूची तैयार करना है [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)
?