Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++11 रैंडम लाइब्रेरी का उपयोग करके रैंडम नंबर जनरेट करें

C++11 <random> लाइब्रेरी

C++11 में, हमें रैंडम नंबर जनरेट करने के लिए रैंडम लाइब्रेरी मिलती है। यहां हमने random_device का उपयोग एक बार रैंडम नंबर जेनरेटर ऑब्जेक्ट mt (Mersenne Twister) को सीड करने के लिए किया है। यह random_device mt19937 से धीमा है, लेकिन हमें इसे सीड करने की आवश्यकता नहीं है। यह ऑपरेटिंग सिस्टम से रैंडम डेटा का अनुरोध करता है।

उदाहरण: 20.0 से 22.0 के बीच यूनिफॉर्म रियल नंबर्स

#include <random>
#include <iostream>
using namespace std;

int main() {
    // नॉन-डिटरमिनिस्टिक सीड के लिए रैंडम डिवाइस
    random_device rd;
    
    // मेर्सेन ट्विस्टर 19937 इंजन (32-बिट)
    mt19937 mt(rd());
    
    // [20.0, 22.0] रेंज में यूनिफॉर्म रियल वितरण
    uniform_real_distribution<double> dist(20.0, 22.0);
    
    // 20 रैंडम नंबर्स जनरेट करें
    for (int i = 0; i < 20; ++i)
        cout << dist(mt) << endl;
    
    return 0;
}

आउटपुट (नमूना)

21.5311
21.7195
21.0961
21.9679
21.197
21.2989
20.6333
20.441
20.7124
20.2654
21.1877
20.4824
20.0575
20.9432
21.222
21.162
21.1029
20.2253
21.5669
20.3357

घटक व्याख्या

घटकउद्देश्य
random_deviceनॉन-डिटरमिनिस्टिक एन्ट्रॉपी सोर्स (हार्डवेयर RNG यदि उपलब्ध)
mt19937मेर्सेन ट्विस्टर इंजन (तेज, उच्च गुणवत्ता, 2^19937-1 पीरियड)
uniform_real_distribution<double>दिए गए रेंज में यूनिफॉर्मली वितरित फ्लोटिंग-पॉइंट मान

अन्य उपयोगी इंजन्स

// 64-बिट मेर्सेन ट्विस्टर
mt19937_64 mt64(rd());

// तेज लेकिन कम गुणवत्ता (एम्बेडेड सिस्टम्स के लिए)
minstd_rand0 engine(rd());      // लीनियर कांग्रुएंशल
minstd_rand engine(rd());       // बेहतर LCG

// क्रिप्टोग्राफिक रूप से सुरक्षित (धीमा)
random_device rd;  // सीधे उपयोग करें या सीड के लिए

सामान्य वितरण

// इंटीजर रेंज [min, max] (इन्क्लूसिव)
uniform_int_distribution<int> dice(1, 6);  // डाइस रोल

// सामान्य वितरण (मीन, स्टैंडर्ड डेविएशन)
normal_distribution<double> nd(0.0, 1.0);  // स्टैंडर्ड नॉर्मल

// बर्नौली (ट्रू/फॉल्स)
bernoulli_distribution coin(0.5);  // फेयर कॉइन

// पॉइसन
poisson_distribution<int> poisson(4.0);  // मीन = 4

बेस्ट प्रैक्टिसेज

  • इंजन को रीयूज़ करें: प्रत्येक कॉल पर नया इंजन न बनाएं
  • थ्रेड सेफ्टी: random_device थ्रेड-सेफ है; इंजन्स नहीं हैं - प्रति थ्रेड एक इंजन या म्यूटेक्स का उपयोग करें
  • सीडिंग: seed_seq का उपयोग करके एन्ट्रॉपी के कई स्रोतों से उचित सीडिंग करें
  • डिटरमिनिस्टिक टेस्टिंग: ज्ञात सीड के साथ इंजन का उपयोग करके पुनरुत्पादन योग्य परिणामों के लिए

उचित सीडिंग उदाहरण

random_device rd;
seed_seq seq{rd(), rd(), rd(), rd(), rd(), rd(), rd(), rd()};
mt19937 mt(seq);  // बेहतर एन्ट्रॉपी
  1. - पायथन रैंडम नंबर कैसे जनरेट करता है?

    पायथन के स्टैंडर्ड डिस्ट्रीब्यूशन में एक random मॉड्यूल होता है जिसमें रैंडम नंबर जनरेशन के लिए फ़ंक्शन होते हैं। बेसिक random() फ़ंक्शन 0 और 1 के बीच एक रैंडम फ्लोटिंग पॉइंट नंबर वापस करता है। >>> import random >>> random.random() 0.5204702770265925 उसी मॉड्यूल में randrange() फ

  1. - वेटेड रैंडम नंबर जनरेशन में महारत: तकनीकें और अनुप्रयोग

    रैंडम नंबर आमतौर पर जिसे हम यूनिफॉर्म डिस्ट्रीब्यूशन कहते हैं उसका पालन करते हैं, जिसका अर्थ है कि किसी भी नंबर के चुने जाने की समान संभावना होती है। लेकिन अगर आप चाहते हैं कि कुछ नंबर दूसरों की तुलना में अधिक बार चुने जाएं तो आपको एक अलग रणनीति की आवश्यकता होगी: एक वेटेड रैंडम नंबर जनरेटर। कुछ व्या

  1. - रूबी में रैंडम नंबर्स और स्ट्रिंग्स में मास्टर करें: एक व्यावहारिक गाइड

    यदि आप रूबी में रैंडम नंबर्स और स्ट्रिंग्स उत्पन्न करना सीखना चाहते हैं, तो आप सही जगह पर हैं। क्योंकि यह लेख ठीक उसी के बारे में है! एक रैंडम नंबर के साथ आप एक सरणी से एक रैंडम तत्व चुन सकते हैं, एक सूची से विजेता चुन सकते हैं, डाइस रोल उत्पन्न कर सकते हैं, आदि। रूबी में, विभिन्न गुणों के साथ रैंडम