c++ - Usefulness of `rand()` - or who should call `srand()`? -


पृष्ठभूमि: मैं rand () , std :: rand () का उपयोग करता / कोड>, std :: random_shuffle () और वैज्ञानिक गणनाओं के लिए मेरे कोड में अन्य फ़ंक्शन अपने परिणामों को पुन: उत्पन्न करने के लिए, मैं हमेशा स्पष्ट रूप से यादृच्छिक बीज निर्दिष्ट करता हूं और इसे srand () के माध्यम से सेट करता हूं। हाल ही में जब मैंने यह सोचा कि जब भी अपना पहला उपयोग - srand () कॉल कॉल के बाद किया गया था - lazily srand () P>

मैंने एक में भर दिया है, लेकिन मुझे जवाब मिला:

पहले तब libxml2 आरंभ करें लाइब्रेरी से यह पूरी तरह कानूनी कॉल है आपको उम्मीद नहीं करनी चाहिए कि कोई अन्य srand () को कॉल नहीं करता है और मैन पेज कहीं नहीं कहता है कि srand () का उपयोग करने से कई समय से बचा जाना चाहिए

यह वास्तव में मेरा प्रश्न अब है यदि सामान्य नीति यह है कि हर लिबिलिटी को srand () पर कॉल कर सकता / सकती है, और मैं इसे यहाँ और वहां भी कॉल कर सकता / सकती हूं, मुझे वास्तव में यह नहीं पता है कि यह कैसे उपयोगी हो सकता है । या फिर रैंड () कैसे उपयोगी है?

यही कारण है कि मैंने सोचा, सामान्य (अलिखित) नीति यह है कि कोई लिब कभी भी srand () कोड> और एप्लिकेशन को केवल शुरुआत में एक बार कॉल करना चाहिए। (बहु-थ्रेडिंग को ध्यान में नहीं लेना) मुझे लगता है कि उस मामले में, आपको कुछ भी अलग तरह से उपयोग करना चाहिए।)

मैंने भी कुछ शोध करने की कोशिश की जो अन्य पुस्तकालयों को वास्तव में srand () कहते हैं , लेकिन मुझे कोई नहीं मिला क्या कोई भी है?

मेरा वर्तमान समाधान इस बदसूरत कोड है:

  {// xmlDictCreate को पहली कॉल पर, // libxml2 कुछ आंतरिक यादृच्छिक सिस्टम को प्रारंभ करेगा, / / जो कि srand कॉल करता है (समय (नल))। // इसलिए, पहले यहां कॉल करें, ताकि हम अपने // अपने यादृच्छिक बीज का उपयोग कर सकें। XmlDictPtr p = xmlDictCreate (); xmlDictFree (पी); } Srand (my_own_seed);   

शायद ही एकमात्र साफ समाधान उस पर प्रयोग नहीं करेगा और केवल अपने स्वयं के यादृच्छिक जनरेटर (हो सकता है) का उपयोग करने के लिए होगा। लेकिन यह वास्तव में सवाल नहीं है सवाल है, जिसे srand () को कॉल करना चाहिए, और अगर हर कोई ऐसा करता है, तो रैंड () कैसे उपयोगी है?

इसके बजाय नया & lt; random & gt; हैडर का उपयोग करें यह कई इंजन उदाहरणों के लिए अनुमति देता है, अलग-अलग एल्गोरिदम का उपयोग कर और आपके लिए, स्वतंत्र बीज के लिए।

[संपादित करें] "उपयोगी" भाग का जवाब देने के लिए, रैंड उत्पन्न यादृच्छिक संख्याएं यह वही है जो इसके लिए अच्छा है। यदि आपको प्रत्यावर्तनीयता सहित सुधरेदार नियंत्रण की आवश्यकता है, तो आपको केवल एक ज्ञात बीज ही नहीं होना चाहिए, बल्कि एक ज्ञात एल्गोरिदम। srand सबसे अच्छे से आपको एक निश्चित बीज देता है, इसलिए यह एक पूर्ण समाधान नहीं है।

Comments

Popular posts from this blog

Out of index C/C++ -

regex - PatternSyntaxException: while using String.ReplaceAll function in java? -

java - Projects which are accessed via multiple (different) IDEs: Ant or Maven? -