নীচের কোডটি অন্তর্ভুক্ত [1,100] পাঁচটি সিউডো-এলোমেলো সংখ্যার একটি তালিকা উত্পন্ন করার জন্য বোঝানো হয়েছে। আমি এর default_random_engine
সাথে বীজ বন্টন করি time(0)
, যা ইউনিক্স সময়ে সিস্টেমের সময় দেয় । আমি যখন মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও 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 হিসাবে উত্পন্ন হয় It এর পরিবর্তিত মান সহ 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)
?