2013-02-12 9 views

उत्तर

16

आप "पोर्टेबल" को कैसे परिभाषित करते हैं?

यदि "पोर्टेबल" द्वारा, आपका मतलब है "एक ही इनपुट दिए गए यादृच्छिक संख्याओं के बाइनरी समान अनुक्रमों का उत्पादन करेगा", तो हाँ, rand पोर्टेबल नहीं है। और हां, C++ random generators पोर्टेबल हैं (उनमें से अधिकतर std::default_random_engine या std::random_device), क्योंकि वे विशिष्ट एल्गोरिदम लागू करते हैं। rand को कुछ भी होने की अनुमति है, जब तक कि यह पूरी तरह यादृच्छिक संख्या जेनरेटर के विपरीत नहीं है।

कहा जा रहा है, जैसा कि @PeteBecker ने बताया, वितरण स्वयं इतनी अच्छी तरह से परिभाषित नहीं हैं। इसलिए std::mt19937 किसी दिए गए बीज के लिए मानों के समान अनुक्रम का उत्पादन करेगा, अलग-अलग std::uniform_int_distribution एस एक ही इनपुट अनुक्रम और सीमा के लिए अलग-अलग मान दे सकते हैं।

बेशक, यदि आपको स्थिरता की आवश्यकता है, तो आप हमेशा अपना वितरण परिभाषित कर सकते हैं।

+3

हाँ है कि क्या मैं पोर्टेबल का मतलब है। – Xavier

+0

आप [मेरे उत्तर यहां] [http://stackoverflow.com/a/24554535/1708801) में परिभाषित वितरण के वितरण के लिए तर्क प्राप्त कर सकते हैं। –

5

<random> में वर्णित यादृच्छिक संख्या इंजन पोर्टेबिलिटी सुनिश्चित करने के लिए उनके एल्गोरिदम के लिए स्पष्ट आवश्यकताएं हैं। वितरण नहीं करते हैं।

+0

क्या आपके पास इसका कोई संदर्भ है? –

+1

सी ++ मानक इसके लिए संदर्भ है। –

1

उदाहरण के लिए आप std::mt19937 (Mersenne Twister) के साथ "समान इनपुट दिए गए यादृच्छिक संख्याओं के समान अनुक्रम" उत्पन्न कर सकते हैं (@ निकोल बोलास से)। आप निश्चित रूप से rand() के साथ ऐसा नहीं कर पाए जो काफी परेशान था।

संबंधित प्रश्न:

संबंधित मुद्दे