क्या सी ++ 11 पोर्टेबल में लाइब्रेरी है? मैंने रैंड से बचा है() क्योंकि मैंने सुना है कि यह पोर्टेबल नहीं था।<random> लाइब्रेरी सी ++ 11 पोर्टेबल में है?
उत्तर
आप "पोर्टेबल" को कैसे परिभाषित करते हैं?
यदि "पोर्टेबल" द्वारा, आपका मतलब है "एक ही इनपुट दिए गए यादृच्छिक संख्याओं के बाइनरी समान अनुक्रमों का उत्पादन करेगा", तो हाँ, rand
पोर्टेबल नहीं है। और हां, C++ random generators पोर्टेबल हैं (उनमें से अधिकतर std::default_random_engine
या std::random_device
), क्योंकि वे विशिष्ट एल्गोरिदम लागू करते हैं। rand
को कुछ भी होने की अनुमति है, जब तक कि यह पूरी तरह यादृच्छिक संख्या जेनरेटर के विपरीत नहीं है।
कहा जा रहा है, जैसा कि @PeteBecker ने बताया, वितरण स्वयं इतनी अच्छी तरह से परिभाषित नहीं हैं। इसलिए std::mt19937
किसी दिए गए बीज के लिए मानों के समान अनुक्रम का उत्पादन करेगा, अलग-अलग std::uniform_int_distribution
एस एक ही इनपुट अनुक्रम और सीमा के लिए अलग-अलग मान दे सकते हैं।
बेशक, यदि आपको स्थिरता की आवश्यकता है, तो आप हमेशा अपना वितरण परिभाषित कर सकते हैं।
<random>
में वर्णित यादृच्छिक संख्या इंजन पोर्टेबिलिटी सुनिश्चित करने के लिए उनके एल्गोरिदम के लिए स्पष्ट आवश्यकताएं हैं। वितरण नहीं करते हैं।
क्या आपके पास इसका कोई संदर्भ है? –
सी ++ मानक इसके लिए संदर्भ है। –
उदाहरण के लिए आप std::mt19937 (Mersenne Twister) के साथ "समान इनपुट दिए गए यादृच्छिक संख्याओं के समान अनुक्रम" उत्पन्न कर सकते हैं (@ निकोल बोलास से)। आप निश्चित रूप से rand()
के साथ ऐसा नहीं कर पाए जो काफी परेशान था।
संबंधित प्रश्न:
हाँ है कि क्या मैं पोर्टेबल का मतलब है। – Xavier
आप [मेरे उत्तर यहां] [http://stackoverflow.com/a/24554535/1708801) में परिभाषित वितरण के वितरण के लिए तर्क प्राप्त कर सकते हैं। –