rand(n)
0
और n
बीच की एक संख्या देता है। rand
मेरे प्लेटफ़ॉर्म पर पूर्णांक सीमा तक सभी तर्कों के लिए "यादृच्छिकता" के संबंध में अपेक्षित कार्य करेगा?पर्ल की रैंड के लिए तर्क कितना बड़ा हो सकता है?
उत्तर
यह आपके randbits
मूल्य पर निर्भर करने के लिए जा रहा है:
रैंड आपके सिस्टम के यादृच्छिक संख्या जनरेटर कॉल (या जो भी पर्ल की अपनी प्रतिलिपि में संकलित किया गया था)। इस चर्चा के लिए, मैं जेनरेटर रैंड को रैंड, पर्ल के फ़ंक्शन से अलग करने के लिए कॉल करूंगा। रैंड 0 से 2 ** रैंडबिट्स - 1, समेत एक पूर्णांक उत्पन्न करता है, जहां रैंडबिट एक छोटा पूर्णांक है। यह देखने के लिए कि यह आपके पर्ल में क्या है, 'perl -V: randbits' कमांड का उपयोग करें। सामान्य मान 15, 16, या 31.
जब आप तर्क तर्क के साथ रैंड को कॉल करते हैं, तो perl उस मान को पूर्णांक के रूप में लेता है और इस मान की गणना करता है।
arg * RAND rand(arg) = --------------- 2**randbits
यह मान हमेशा आवश्यक सीमा में गिर जाएगा।
0 <= rand(arg) < arg
लेकिन जैसे आर्ग 2 की तुलना में बड़ा हो जाता है ** randbits, बातें समस्याग्रस्त हो जाते हैं। आइए एक ऐसी मशीन की कल्पना करें जहां randbits = 15 है, इसलिए रैंड 0..32767 से है। यही है, जब भी हम रैंड कहते हैं, हम 32768 संभावित मूल्यों में से एक प्राप्त करते हैं। इसलिए, जब हम रैंड (तर्क) कहते हैं, तो हमें 32768 संभावित मानों में से एक मिलता है।
perl के भीतर से randbits तक पहुंचने के लिए, 'कॉन्फ़िगर का उपयोग करें; प्रिंट $ कॉन्फ़िगर :: कॉन्फ़िगर {'randbits'} '। अधिकांश अन्य प्लेटफार्मों के लिए एमएसडब्ल्यू 32, 48 के लिए रैंडबिट 15 है। – ysth
@ysth भी perl -V है: randbits –
हां, इसका जवाब में उल्लेख किया गया है, लेकिन यह उपयोग करने के लिए थोड़ा मूर्ख होगा ... – ysth
यह आपके सिस्टम (छद्म) यादृच्छिक संख्या जेनरेटर द्वारा उपयोग की जाने वाली बिट्स की संख्या पर निर्भर करता है। आप
use Config;
my $randbits = $Config{randbits};
rand
के माध्यम से
perl -V:randbits
या एक कार्यक्रम के भीतर के माध्यम से इस मूल्य को खोजने के उत्पन्न कर सकते हैं 2^randbits अलग यादृच्छिक संख्या कर सकते हैं। जबकि आप 2^randbits से बड़ी संख्या उत्पन्न कर सकते हैं, आप श्रेणी [0, एन) में सभी पूर्णांक मान उत्पन्न नहीं कर सकते हैं जब N> 2^randbits। जिनमें से दो एक शक्ति नहीं हैं एन के
मान भी समस्या हो सकती है, के रूप में (पूर्णांक छोटा) यादृच्छिक मानों का वितरण काफी सपाट नहीं होगा। कुछ मूल्य थोड़ा अधिक प्रतिनिधित्व किए जाएंगे, दूसरों को थोड़ा कम प्रतिनिधित्व किया जाएगा।
यह ध्यान देने योग्य है कि randbits एक मामूली 15 विंडोज पर है लायक है। इसका मतलब है कि आप केवल 32768 (2 ** 15) विशिष्ट मान प्राप्त कर सकते हैं। आप rand
करने के लिए कई कॉल करने और मूल्यों के संयोजन से स्थिति में सुधार कर सकते हैं:
use Config;
use constant RANDBITS => $Config{randbits};
use constant RAND_MAX => 2**RANDBITS;
sub double_rand {
my $max = shift || 1;
my $iv =
int rand(RAND_MAX) << RANDBITS
| int rand(RAND_MAX);
return $max * ($iv/2**(2*RANDBITS));
}
मान लिया जाये कि randbits = 15, double_rand
की नकल करता है randbits = 30, +१०७३७४१८२४ (2 ** 30) संभव विशिष्ट मान प्रदान करते हैं। यह उपरोक्त वर्णित दोनों समस्याओं को कम करता है (लेकिन कभी खत्म नहीं कर सकता)।
हम बड़े यादृच्छिक पूर्णांकों के बारे में और क्या यह उन्हें प्राप्त करने के लिए संभव है बात कर रहे हैं। यह ध्यान दिया जाना चाहिए कि दो यादृच्छिक पूर्णांक का समापन भी एक यादृच्छिक पूर्णांक है।तो अगर आपके सिस्टम, किसी भी कारण से, नहीं 999999999999 पार जा सकते हैं, तो बस
$bigrand = int(rand(999999999999)).int(rand(999999999999));
लिख सकते हैं और आप (अधिकतम) दो बार लंबाई के एक यादृच्छिक पूर्णांक मिल जाएगा।
(वास्तव में इस सवाल का "कितना बड़ा रैंड संख्या हो सकती है" बल्कि जवाब "आप में बड़ा रूप में आप चाहते हैं, बस कम संख्या जोड़ प्राप्त कर सकते हैं" करने के लिए संख्यात्मक जवाब नहीं है।)
स्टैक ओवरफ़्लो में आपका स्वागत है। जो आप उत्तर के रूप में सुझाव दे रहे हैं वह दो मौजूदा उत्तरों में से एक द्वारा कवर किया गया है, और उत्तर के बजाय बेहतर है। यदि आप अपनी तकनीक का उपयोग करने जा रहे थे, तो आपको यह सुनिश्चित करना होगा कि संख्या का दूसरा भाग पर्याप्त शून्य से पूर्वनिर्धारित है। आपने उदाहरण में 12 अंक चुने हैं, जो कुछ मुद्दों का कारण बन सकता है; 9 अंक सुरक्षित होंगे। स्ट्रिंग उत्पन्न करने के लिए आपको शायद 'sprintf ("% d% 09d", रैंड (999_999_ 999), रैंड (999_999_ 999)) का उपयोग करने की आवश्यकता होगी। यहां तक कि विंडोज़ पर भी समस्याग्रस्त हो सकता है; क्यों के लिए अन्य जवाब देखें। –
- 1. पाइथन ऐरे कितना बड़ा हो सकता है?
- 2. एपेंगीन कार्य पेलोड कितना बड़ा हो सकता है?
- 3. XP/SCRUM के लिए कितना बड़ा है?
- 4. आरएसएस फ़ीड एक्सएमएल फ़ाइल के लिए कितना बड़ा बड़ा है?
- 5. "बिगडाटा" कितना बड़ा डेटा है?
- 6. जीसीसी के साथ wchar_t कितना बड़ा है?
- 7. छोटा, सामान्य, बड़ा और xlarge कितना बड़ा है?
- 8. पृष्ठभूमि छवियों में आने पर कितना बड़ा बड़ा है?
- 9. प्रदर्शन से पहले एक MySQL डेटाबेस कितना बड़ा हो सकता है
- 10. GUID कितना छोटा हो सकता है?
- 11. सिल्वरलाइट इंस्टॉल बेस - यह कितना बड़ा है?
- 12. ओरेकल और पोस्टग्रेएसक्यूएल के बीच प्रदर्शन अंतर कितना बड़ा है?
- 13. रैंड() perl
- 14. सबसे बड़ा प्रकार उपलब्ध हो रहा है
- 15. हेडर सहित आईपी पैकेट फ्रेम कितना बड़ा है?
- 16. PHP - रैंड (1,1000) = 1000 रैंड (1,1000) = रैंड (1,1000) के रूप में संभव है?
- 17. मैं कोड है रैंड
- 18. जावास्क्रिप्ट टेबल सॉर्टिंग/पेजिंग (क्लाइंट-साइड)। कितना बड़ा बहुत बड़ा है?
- 19. रैंड के जीसीसी कार्यान्वयन()
- 20. कितना बड़ा आरएसएस रीडर काम करता है (netvibes, Google reader ...)
- 21. LINQ के लिए कितना है?
- 22. दूर करने के लिए कितना बड़ा है, तो-और कुछ-अगर श्रृंखला
- 23. वेब पेज के लिए ढेर आकार कितना बड़ा माना जाता है?
- 24. पाइथन कहने में कितना ऑपरेटिंग सिस्टम लिखा जा सकता है?
- 25. यह निर्धारित करने के लिए कि Request.Form ऑब्जेक्ट कितना बड़ा है?
- 26. क्या टेम्पलेट पैरामीटर का डिफ़ॉल्ट तर्क विशिष्ट हो सकता है?
- 27. पर्ल में सबराउटिन के लिए तर्क के रूप में हैश का उपयोग कैसे कर सकता हूं?
- 28. एक यूआरएल क्वेरी तर्क कब तक हो सकता है?
- 29. asp.net mvc viewmodels। कितना तर्क (यदि कोई है) में
- 30. मुझे डेटाबेस में पोस्टल कोड स्टोर करने की आवश्यकता है। कॉलम कितना बड़ा होना चाहिए?
अधिक जानकारी के लिए सूचना, मुझे यह दिलचस्प लगता है: http://wellington.pm.org/archive/200704/randomness/index.html – vol7ron