C++ में सीधे रैंडम फ्लोट जनरेट करने का कोई बिल्ट-इन फंक्शन नहीं है, लेकिन rand() या आधुनिक <random> लाइब्रेरी का उपयोग करके आसानी से बनाया जा सकता है।
विधि 1: rand() का उपयोग (लेगेसी)
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
float randomFloat(float min, float max) {
return min + static_cast<float>(rand()) / RAND_MAX * (max - min);
}
int main() {
srand(static_cast<unsigned>(time(nullptr)));
cout << "Random floats (0.0 to 5.0):\n";
for (int i = 0; i < 10; i++) {
cout << randomFloat(0.0f, 5.0f) << " ";
}
cout << endl;
return 0;
}
विधि 2: C++11 <random> (आधुनिक, सिफारिश)
#include <iostream>
#include <random>
#include <chrono>
using namespace std;
int main() {
// हाई-क्वालिटी रैंडम इंजन
random_device rd;
mt19937 gen(rd()); // मेर्सन ट्विस्टर
// यूनिफॉर्म रियल डिस्ट्रीब्यूशन [min, max)
uniform_real_distribution<> dis(0.0, 5.0);
cout << "Modern random floats (0.0 to 5.0):\n";
for (int i = 0; i < 10; i++) {
cout << dis(gen) << " ";
}
cout << endl;
// अन्य डिस्ट्रीब्यूशन्स
normal_distribution<> nd(0.0, 1.0); // नॉर्मल डिस्ट्रीब्यूशन (मीन=0, एसडी=1)
cout << "\nNormal distribution (mean=0, sd=1):\n";
for (int i = 0; i < 10; i++) {
cout << nd(gen) << " ";
}
exponential_distribution<> ed(1.0); // एक्सपोनेंशियल
cout << "\nExponential distribution (lambda=1):\n";
for (int i = 0; i < 10; i++) {
cout << ed(gen) << " ";
}
cout << endl;
return 0;
}
आउटपुट
Modern random floats (0.0 to 5.0): 2.07648 4.3115 1.31092 2.22465 2.17292 1.48381 1.91137 0.56505 2.24326 4.44517 Normal distribution (mean=0, sd=1): 0.123 -0.456 1.789 -0.234 0.567 -1.234 0.891 -0.678 0.345 1.012 Exponential distribution (lambda=1): 0.234 1.567 0.089 2.345 0.678 0.123 3.456 0.789 0.456 1.234
महत्वपूर्ण अंतर
| पहलू | rand() | <random> |
|---|---|---|
| क्वालिटी | खराब (LCG) | उत्कृष्ट (MT19937, आदि) |
| डिस्ट्रीब्यूशन | केवल यूनिफॉर्म इंट | कई (uniform_real, normal, exponential, आदि) |
| थ्रेड सेफ्टी | नहीं | हां (प्रति-थ्रेड इंजन) |
| सीडिंग | कमजोर (srand) | मजबूत (random_device) |
| रेंज कंट्रोल | मैनुअल स्केलिंग | बिल्ट-इन डिस्ट्रीब्यूशन |
सामान्य गलतियां
// ❌ गलत: integer division
float f = rand() / RAND_MAX; // हमेशा 0 या 1!
// ✅ सही: float में कास्ट पहले
float f = static_cast<float>(rand()) / RAND_MAX;
// ❌ गलत: हर कॉल पर srand()
for (int i=0; i<10; i++) {
srand(time(0)); // एक ही सेकंड में समान सीड!
cout << rand() << " ";
}
// ✅ सही: एक बार srand() या random_device
srand(time(0)); // या बेहतर: random_device rd; mt19937 gen(rd());
निष्कर्ष: आधुनिक C++ में हमेशा <random> उपयोग करें। rand() केवल लेगेसी कोड के लिए।