जबकि कोई भी कंप्यूटर वास्तव में यादृच्छिक संख्या उत्पन्न नहीं कर सकता है, रूबी एक विधि तक पहुंच प्रदान करता है जो वापस आ जाएगी कूट-यादृच्छिक संख्या।
कोई भी कंप्यूटर सही मायने में उत्पन्न नहीं कर सकता है यादृच्छिक संख्या पूरी तरह से गणना द्वारा। सबसे अच्छा वे कर सकते हैं उत्पन्न करने के लिए है कूट-यादृच्छिक संख्याएँ, जो संख्याओं का एक क्रम है दिखाई यादृच्छिक लेकिन नहीं हैं।
एक मानव पर्यवेक्षक के लिए, ये संख्या वास्तव में यादृच्छिक हैं। कोई दोहराए जाने वाले अनुक्रम नहीं होंगे, और, कम से कम मानव पर्यवेक्षक के लिए, वे कोई स्पष्ट पैटर्न पेश नहीं करेंगे। हालांकि, पर्याप्त समय और प्रेरणा, मूल बीज खोजा जा सकता है, अनुक्रम को फिर से बनाया गया है और अनुक्रम में अगले नंबर का अनुमान लगाया गया है।
इस कारण से, इस आलेख में चर्चा की गई विधियों का उपयोग संभवतः उन संख्याओं को उत्पन्न करने के लिए नहीं किया जाना चाहिए जो क्रिप्टोग्राफिक रूप से सुरक्षित होना चाहिए।
छद्म आयामी संख्या जनरेटर होना चाहिए वरीयता प्राप्त हर बार एक नया यादृच्छिक संख्या उत्पन्न होने वाले दृश्यों को उत्पन्न करने के लिए। कोई भी विधि जादुई नहीं है - ये प्रतीत होता है यादृच्छिक संख्या अपेक्षाकृत सरल एल्गोरिदम और अपेक्षाकृत सरल अंकगणित का उपयोग करके उत्पन्न होती है। PRNG को बोने से, आप इसे हर बार एक अलग बिंदु पर शुरू कर रहे हैं। यदि आपने इसे सीड नहीं किया है, तो यह हर बार संख्याओं का समान क्रम उत्पन्न करेगा।
रूबी में, कर्नेल # srand विधि को बिना किसी तर्क के कहा जा सकता है। यह समय, प्रक्रिया आईडी और एक अनुक्रम संख्या के आधार पर एक यादृच्छिक संख्या बीज का चयन करेगा। बस फोन करके srand आपके कार्यक्रम की शुरुआत में कहीं भी, यह हर बार जब आप इसे चलाते हैं, तो यह प्रतीत होता है यादृच्छिक संख्याओं की एक अलग श्रृंखला उत्पन्न करेगा। कार्यक्रम शुरू होने पर इस विधि को संक्षेप में कहा जाता है, और समय और प्रक्रिया आईडी (कोई अनुक्रम संख्या) के साथ PRNG को बीज नहीं देता है।
एक बार कार्यक्रम चल रहा है और कर्नेल # srand या तो स्पष्ट रूप से या स्पष्ट रूप से कहा गया था, कर्नेल # रैंड विधि कहा जा सकता है। यह विधि, जिसे कोई तर्क नहीं कहा जाता है, 0 से 1 तक एक यादृच्छिक संख्या लौटाएगा। अतीत में, यह संख्या आम तौर पर उस अधिकतम संख्या तक बढ़ जाती थी जिसे आप और शायद उत्पन्न करना चाहते हैं to_i इसे पूर्णांक में बदलने के लिए इस पर कॉल किया जाता है।
हालांकि, अगर आप रूबी 1.9.x का उपयोग कर रहे हैं तो रूबी चीजों को थोड़ा आसान बनाता है। कर्नेल # रैंड विधि एकल तर्क ले सकती है। यदि यह तर्क ए संख्यात्मक किसी भी तरह से, रूबी उस नंबर पर 0 से (और शामिल नहीं) से पूर्णांक उत्पन्न करेगा।
हालाँकि, यदि आप 10 से 15 तक की संख्या उत्पन्न करना चाहते हैं, तो क्या होगा? आमतौर पर, आप 0 से 5 तक की संख्या उत्पन्न करते हैं और इसे 10 में जोड़ते हैं। हालांकि, रूबी इसे आसान बनाती है।
सुनिश्चित करें कि आप दो प्रकार की श्रेणियों पर ध्यान देते हैं। अगर आपने बुलाया रैंड (10..15), कि 10 से 15 की संख्या उत्पन्न करेगा समेत 15. जहाँ तक रैंड (10... 15) (3 डॉट्स के साथ) 10 से 15 तक की संख्या उत्पन्न करेगा शामिल नहीं 15.
कभी-कभी आपको संख्याओं के यादृच्छिक-दिखने वाले अनुक्रम की आवश्यकता होती है, लेकिन हर बार उसी क्रम को उत्पन्न करने की आवश्यकता होती है। उदाहरण के लिए, यदि आप एक इकाई परीक्षण में यादृच्छिक संख्या उत्पन्न करते हैं, तो आपको हर बार संख्याओं का समान क्रम उत्पन्न करना चाहिए।
एक इकाई परीक्षण जो एक अनुक्रम में विफल रहता है, अगली बार चलने पर फिर से विफल हो जाना चाहिए, यदि अगली बार यह अंतर अनुक्रम उत्पन्न करता है, तो यह विफल नहीं हो सकता है। ऐसा करने के लिए, कॉल करें कर्नेल # srand एक ज्ञात और निरंतर मूल्य के साथ।
इसका कार्यान्वयन कर्नेल # रैंड बल्कि संयुक्त राष्ट्र रूबी है। यह किसी भी तरह से PRNG को अमूर्त नहीं करता है, और न ही यह आपको PRNG को इंस्टेंट करने की अनुमति देता है। PRNG के लिए एक वैश्विक राज्य है जो सभी कोड साझा करता है। यदि आप बीज को बदलते हैं या अन्यथा PRNG की स्थिति को बदलते हैं, तो आपके द्वारा प्रत्याशित की तुलना में इसका व्यापक प्रभाव हो सकता है।
हालाँकि, चूंकि प्रोग्राम इस पद्धति के परिणाम को यादृच्छिक होने की उम्मीद करते हैं - यही इसका उद्देश्य है! - यह शायद कभी कोई समस्या नहीं होगी। केवल यदि प्रोग्राम संख्याओं के अपेक्षित अनुक्रम को देखने की उम्मीद करता है, जैसे कि उसने कॉल किया था srand एक स्थिर मूल्य के साथ, क्या इसे अप्रत्याशित परिणाम देखने चाहिए।