यादृच्छिक संख्याएँ उत्पन्न करना

C++:
यादृच्छिक संख्याएँ उत्पन्न करना

कैसे:

C++ में यादृच्छिक संख्याएं उत्पन्न करने के लिए, आप आमतौर पर <random> हेडर का उपयोग करेंगे, जिसे C++11 में पेश किया गया था, जो विविध वितरण से यादृच्छिक संख्याओं को उत्पन्न करने के लिए एक व्यापक रेंज की सुविधाएं प्रदान करता है।

#include <iostream>
#include <random>

int main() {
    // एक यादृच्छिक इंजन को प्रारंभ करें
    std::random_device rd;  
    std::mt19937 gen(rd()); 

    // सीमा [0, 99] सम्मिलित को परिभाषित करें
    std::uniform_int_distribution<> distrib(0, 99); 

    // निर्धारित सीमा के भीतर 5 यादृच्छिक संख्याएँ उत्पन्न करें और मुद्रित करें
    for(int n=0; n<5; ++n)
        std::cout << distrib(gen) << ' ';
    return 0;
}

यह कोड नमूना एक std::random_device से बीज के साथ एक Mersenne Twister यादृच्छिक संख्या जनरेटर को प्रारंभ करता है। तदुपरांत, यह सीमा [0, 99] में एक समरूप पूर्णांक वितरण की परिभाषा करता है और अंत में इस वितरण से 5 यादृच्छिक संख्याओं को मुद्रित करता है।

नमूना आउटपुट कुछ इस प्रकार दिख सकता है, लेकिन ध्यान दें कि हर निष्पादन संभवतः विभिन्न परिणाम उत्पन्न करेगा:

45 67 32 23 88

गहराई में:

ऐतिहासिक रूप से, C++ में यादृच्छिक संख्या उत्पादन rand() फ़ंक्शन और बीजिंग के लिए srand() फ़ंक्शन पर भारी निर्भरता के साथ, जिसे <cstdlib> हेडर में पाया जाता है। हालाँकि, उत्पन्न संख्याओं के वितरण में इसकी समरूपता और पूर्वानुमेयता की कमी के लिए इस दृष्टिकोण को अक्सर आलोचना की गई।

C++11 में <random> हेडर का परिचय एक महत्वपूर्ण सुधार को चिह्नित करता है, जो यादृच्छिक संख्याएँ उत्पादित करने की एक सोफौस्टिकेटेड प्रणाली प्रदान करता है। प्रदान की गई सुविधाओं में विविध इंजन (जैसे कि std::mt19937 के लिए Mersenne Twister) और वितरण (जैसे कि समरूप वितरण के लिए std::uniform_int_distribution) शामिल हैं जिन्हें प्रोग्रामर की विशिष्ट आवश्यकताओं के अनुसार संयोजित किया जा सकता है, जिससे अधिक पूर्वानुमेय व्यवहार, बेहतर प्रदर्शन, और अधिक लचीलापन प्राप्त होता है।

<random> लाइब्रेरी पुराने rand() दृष्टिकोण की तुलना में बहुत बेहतर है, फिर भी यह ध्यान देने योग्य है कि वास्तव में यादृच्छिक संख्याओं का उत्पादन — विशेष रूप से क्रिप्टोग्राफिक उद्देश्यों के लिए — अभी भी अतिरिक्त विचारों पर निर्भर करता है। क्रिप्टोग्राफिक एप्लिकेशनों के लिए, सुरक्षा के लिए विशेष रूप से डिजाइन की गई लाइब्रेरी, जो अक्सर हार्डवेयर एंट्रोपी सोर्स का उपयोग करती हैं, का इस्तेमाल किया जाना चाहिए।