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

C++ में रैंडम फ्लोट नंबर जनरेट करना


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() केवल लेगेसी कोड के लिए।

  1. Microsoft Excel में रैंडम स्ट्रॉन्ग पासवर्ड कैसे जनरेट करें Microsoft Excel में रैंडम स्ट्रॉन्ग पासवर्ड कैसे जनरेट करें

    मजबूत पासवर्ड आपके इलेक्ट्रॉनिक अकाउंट्स को ब्रूट फोर्स अटैक्स और हैकर्स द्वारा किए जाने वाले अन्य साइबर अटैक्स से बचाने के लिए जरूरी हैं। इस लेख में, मैं आपको दिखाऊंगा कि Microsoft Excel में रैंडम स्ट्रॉन्ग पासवर्ड कैसे जनरेट करें। Excel का उपयोग करके रैंडम स्ट्रॉन्ग पासवर्ड बनाएं Excel में कई इनब

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

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

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

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