यादृच्छिक संख्या पैदा करने की सी ++ 11 तरीका है:निर्दिष्ट यादृच्छिक वितरण के साथ किस प्रकार का यादृच्छिक संख्या इंजन उपयोग करना है?
- एक यादृच्छिक संख्या इंजन
- का दृष्टांत वितरण के माध्यम से एक यादृच्छिक वितरण
- पुश इंजन से यादृच्छिक संख्या इन्स्तांत
समस्या यह है कि दोनों यादृच्छिक संख्या इंजन और यादृच्छिक वितरण arit के प्रकार के संबंध में टेम्पलेट किए गए हैं आप का उपयोग कर रहे हैं
इन दो प्रकार के अंकगणितीय से संबंधित होने की आवश्यकता कैसे है?
आप वितरण और विपरीत के लिए इंजन के लिए एक 32 बिट पूर्णांक और एक 64 बिट पूर्णांक का उपयोग कर सकते हैं? खतरे क्या हैं? फ़्लोटिंग पॉइंट प्रकारों के बारे में क्या?
मैं एक दिशानिर्देश परिकल्पना करता हूं कि इंजन द्वारा उत्पन्न संभावित संख्याओं की संख्या अलग-अलग यादृच्छिक संख्याओं की संख्या से अधिक या बराबर होनी चाहिए, जिन्हें आप प्राप्त करने की उम्मीद कर रहे हैं। दुर्भाग्य से मैं अपने परिकल्पना का परीक्षण करने में सक्षम नहीं था, क्योंकि मेरे कंप्यूटर uint_fast32_t
और uint_fast64_t
समान हैं और इसलिए तीन सी ++ 11 जेनरेटर में से प्रत्येक के लिए सुझाए गए इंजन एक ही परिणाम उत्पन्न करते हैं।
सी ++ 11 वितरण std::uniform_real_distribution या std::uniform_int_distribution की तरह पर दस्तावेज़ीकरण इस संबंध में अधूरा है:
यह खंड अधूरा है। कारण: जेनरेटर
पर लेकिन uniform_real_distribution
की exapmple gcc 4.7
कार्यान्वयन के लिए आवश्यकताओं है:
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng,
const param_type& __p)
{
__detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
__aurng(__urng);
return (__aurng() * (__p.b() - __p.a())) + __p.a();
}
कहाँ एडाप्टर है:
किसी भी उत्पादन परिवर्तित करने के लिए एक एडाप्टर वर्ग एक विशिष्ट वितरण के लिए इनपुट में जेनरेटर।
"किसी भी" आश्वस्त लगता है, लेकिन यह मानक है? मैं विशेष रूप से छिपे हुए अतिप्रवाहों के बारे में चिंतित हूं जो पता लगाना मुश्किल है और जो वितरण की शुद्धता से समझौता कर सकता है।
आवश्यकताएं http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf (पृष्ठ 904 के बाद) में पाई जा सकती हैं। मुझे कोई जवाब नहीं मिला, लेकिन शायद आप कर सकते हैं? – Escualo