সি ++ 11 এর ডিফল্টরূপে তার নতুন <random>
ইন্টারফেসের অংশ হিসাবে একটি মার্সেন টুইস্টার জেনারেটর অন্তর্ভুক্ত । উদাহরণস্বরূপ, এমটি ব্যবহার করে [-10, 10] এর মধ্যে সমানভাবে পূর্ণসংখ্যার উত্পাদন করা:
std::mt19937 eng; // This is the Mersenne Twister
std:::uniform_int_distribution<int> dist(-10, 10)
for (int i = 0; i < 10; ++i)
std::cout << dist(eng) << std::endl;
নামগুলির কিছুটা আলাদা হলেও এর বেশিরভাগ টিআর 1 প্রদানের যে কোনও সংকলকটিতেও পাওয়া যায়; std::tr1::mt19937
এবং std::tr1::uniform_int<int>
।
আমি সাধারণত মানুষকে মার্সেন টুইস্টার ব্যবহার থেকে দূরে রাখতে সাবধান করি। এটি একটি ঠিক আছে অ্যালগরিদম তবে এর প্রচুর জনপ্রিয়তা কেবল বিপণন। এলোমেলোতার 624 মাত্রা বেশিরভাগ মানুষের প্রয়োজনের চেয়ে বেশি, এবং এমটি তুলনামূলকভাবে ভারী রাষ্ট্রীয় প্রয়োজনীয়তা বহন করে এবং যখন এটি একটি পূর্ণ টেবিলটি পুনরায় স্বীকৃতি দেয় তখন এটি ক্যাশে ফুঁকতে পারে। আমি ব্যক্তিগতভাবে xorshift এ আংশিক , যা ক্ষুদ্র স্মৃতি এবং সিপিইউ প্রয়োজনীয়তার সাথে একটি গেমের প্রয়োজনের জন্য দুর্দান্ত সময়সীমা এবং যুক্তিসঙ্গত বিতরণ দেয়।
আমি (? বেশিরভাগই) সি ++ 11 অনুবর্তী xorshift জেনারেটরের লিখেছি - xorshift.hpp , xorshift.cpp - এবং পাবলিক ডোমেইনে সেটিকে রাখে। আপনি উপরের মতো যেকোন সি ++ র্যান্ডমাইজেশন ফাংশনে প্লাগ করতে পারেন:
xorshift eng;
std:::uniform_int_distribution<int> dist(-10, 10)
for (int i = 0; i < 10; ++i)
std::cout << dist(eng) << std::endl;