C ++ 11 में अपने नए <random>
इंटरफ़ेस के भाग के रूप में डिफ़ॉल्ट रूप से मेरसेन ट्विस्टर जनरेटर शामिल है । उदाहरण के लिए, MT का उपयोग करके [-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>
।
मैं आमतौर पर लोगों को Mersenne Twister के इस्तेमाल से दूर करता हूं। यह एक ठीक एल्गोरिथ्म है, लेकिन इसकी लोकप्रियता का एक बहुत ही विपणन है। यादृच्छिकता के 624 आयाम अधिकांश लोगों की आवश्यकता से अधिक है, और एमटी अपेक्षाकृत भारी राज्य की आवश्यकताओं को पूरा करता है और जब यह एक पूर्ण तालिका पुनर्गणना करता है तो यह कैश को उड़ा सकता है। मैं व्यक्तिगत रूप से xorshift का आंशिक हिस्सा हूं जो कि छोटी गेम और सीपीयू आवश्यकताओं के साथ खेल की ज़रूरतों के लिए उत्कृष्ट अवधि और उचित वितरण देता है।
मैंने एक (अधिकतर?) C ++ 11-संगत xorshift जनरेटर - xorshift.hpp , xorshift.cpp - लिखा है और इसे सार्वजनिक डोमेन में रखा है। आप इसे किसी भी C ++ 11 रेंडमाइजेशन फंक्शन में प्लग कर सकते हैं, जैसा कि ऊपर दिया गया है:
xorshift eng;
std:::uniform_int_distribution<int> dist(-10, 10)
for (int i = 0; i < 10; ++i)
std::cout << dist(eng) << std::endl;