C-स्टाइल रैंडम नंबर जनरेशन
आइए देखते हैं कि C++ का उपयोग करके रैंडम नंबर कैसे जनरेट करें। यहां हम 0 से किसी मान तक की रेंज में एक रैंडम नंबर जनरेट कर रहे हैं (इस प्रोग्राम में मैक्स मान 100 है)।
मुख्य फ़ंक्शन्स
srand(seed): रैंडम नंबर जेनरेटर को सीड करता हैrand(): छद्म-रैंडम नंबर रिटर्न करता है (0 से RAND_MAX तक)
उदाहरण: 0 से 99 तक रैंडम नंबर
#include <iostream>
#include <cstdlib> // srand, rand के लिए
#include <ctime> // time के लिए
using namespace std;
int main() {
int max = 100; // ऊपरी सीमा (एक्सक्लूसिव)
// वर्तमान समय के साथ सीड करें (प्रत्येक रन के लिए अलग सीक्वेंस)
srand(time(0));
cout << "The random number is: " << rand() % max;
return 0;
}
संभावित आउटपुट्स
The random number is: 51
The random number is: 29
The random number is: 47
रेंज में रैंडम नंबर: सही सूत्र
rand() % max का उपयोग करने से मॉड्यूलो बायस होता है। बेहतर सूत्र:
// [min, max] रेंज में रैंडम इंटीजर
int random_in_range(int min, int max) {
return min + rand() / (RAND_MAX / (max - min + 1) + 1);
}
// या C++11 के साथ (नीचे देखें)
मॉडर्न C++ (C++11 और बाद): <random> लाइब्रेरी
पुराने rand() के कई दोष हैं: खराब गुणवत्ता, गैर-थ्रेड-सेफ, कोई वितरण नियंत्रण नहीं। C++11 ने <random> हेडर पेश किया:
उदाहरण: मॉडर्न दृष्टिकोण
#include <iostream>
#include <random>
using namespace std;
int main() {
// रैंडम डिवाइस से सीड (हार्डवेयर एन्ट्रॉपी यदि उपलब्ध हो)
random_device rd;
// मेर्सेन ट्विस्टर इंजन (उच्च गुणवत्ता, तेज)
mt19937 gen(rd());
// यूनिफॉर्म वितरण [1, 100]
uniform_int_distribution<> distrib(1, 100);
// 5 रैंडम नंबर्स जनरेट करें
for (int i = 0; i < 5; ++i) {
cout << distrib(gen) << " ";
}
cout << endl;
return 0;
}
उपलब्ध वितरण
| वितरण | उपयोग |
|---|---|
uniform_int_distribution | रेंज में रैंडम इंटीजर्स |
uniform_real_distribution | रेंज में रैंडम फ्लोटिंग-पॉइंट |
normal_distribution | गौसियन (सामान्य) वितरण |
bernoulli_distribution | बूलियन (सिक्का टॉस) |
poisson_distribution | पॉइसन वितरण |
सिफारिश
नए कोड के लिए हमेशा <random> लाइब्रेरी का उपयोग करें। rand()/srand() केवल लीगेसी कोड संगतता के लिए है।