सी ++ रैंडम नंबर जेनरेटर
इंटरैक्टिव कोड उदाहरणों के साथ C++ में यादृच्छिक संख्याएँ उत्पन्न करने का तरीका जानें। विस्तृत स्पष्टीकरण के साथ rand(), srand(), <random> library, std::uniform_int_distribution, और std::mt19937 का अन्वेषण करें।
सी ++ कोड संपादक
इंटरैक्टिव कोड उदाहरणों के साथ C++ में यादृच्छिक संख्याएँ उत्पन्न करने का तरीका जानें। विस्तृत स्पष्टीकरण के साथ rand(), srand(), <random> library, std::uniform_int_distribution, और std::mt19937 का अन्वेषण करें।
#include <iostream>
#include <random>
int main() {
int min = 1;
int max = 100;
int quantity = 5;
// Modern C++ random number generation
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(min, max);
std::cout << "Modern C++ random numbers:" << std::endl;
for (int i = 0; i < quantity; i++) {
int num = dis(gen);
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
उत्पादन
यह ब्राउज़र पूर्वावलोकन है, Java या C++ का निष्पादन नहीं। मान क्रिप्टोग्राफ़ी के योग्य नहीं हैं।
उदाहरण का पूर्वावलोकन
क्लासिक सी ++ रैंड के साथ ()
<cstdlib> यादृच्छिक पूर्णांक उत्पन्न करने के लिए पारंपरिक rand() फ़ंक्शन का उपयोग करें। सरल और व्यापक रूप से समर्थित, हालांकि खराब यादृच्छिकता गुणवत्ता के कारण क्रिप्टोग्राफ़िक अनुप्रयोगों के लिए उपयुक्त नहीं है।
एक त्वरित यादृच्छिक संख्या की आवश्यकता है?
बिना कोई कोड लिखे तत्काल परिणाम के लिए हमारे ऑनलाइन यादृच्छिक संख्या जनरेटर का प्रयास करें।
C++ रैंडम नंबर जनरेशन को समझना
rand() का एल्गोरिदम कार्यान्वयन पर निर्भर है। C++11 में std::mt19937 जैसे इंजन और वितरण अलग हैं; वितरण में कोई डिफ़ॉल्ट mt19937 इंजन नहीं होता।
rand() Function
rand() का एल्गोरिदम कार्यान्वयन पर निर्भर है। C++11 में std::mt19937 जैसे इंजन और वितरण अलग हैं; वितरण में कोई डिफ़ॉल्ट mt19937 इंजन नहीं होता।
<random> Library
<random> लाइब्रेरी (सी ++ 11+) std::mt19937 (Mersenne Twister), uniform_int_distribution जैसे विभिन्न वितरण, और रैंड () की तुलना में बेहतर यादृच्छिकता गुणवत्ता के साथ आधुनिक यादृच्छिक संख्या पीढ़ी प्रदान करती है।
uniform_int_distribution
std::uniform_int_distribution समान वितरण के साथ पूर्णांक श्रेणियों पर सटीक नियंत्रण प्रदान करता है। सांख्यिकीय अनुप्रयोगों, सिमुलेशन और जब सटीक श्रेणी नियंत्रण की आवश्यकता हो, वहाँ के लिए आदर्श।
std::mt19937
rand() का एल्गोरिदम कार्यान्वयन पर निर्भर है। C++11 में std::mt19937 जैसे इंजन और वितरण अलग हैं; वितरण में कोई डिफ़ॉल्ट mt19937 इंजन नहीं होता।
सामान्य उपयोग के मामले
गेमिंग और सिमुलेशन
यादृच्छिक पासा रोल, कार्ड ड्रॉ, प्रक्रियात्मक पीढ़ी, और <random> खेल के छोरों और सिमुलेशन में रैंड () या आधुनिक पुस्तकालय का उपयोग करके खेल घटनाओं उत्पन्न करें।
सुरक्षा और क्रिप्टोग्राफी
rand() और std::mt19937 क्रिप्टोग्राफ़िक जनरेटर नहीं हैं। सुरक्षा के लिए दस्तावेज़ित क्रिप्टोग्राफ़िक लाइब्रेरी या OS API उपयोग करें; std::random_device सभी प्लेटफ़ॉर्म पर सुरक्षा की गारंटी नहीं देता।
उच्च प्रदर्शन कंप्यूटिंग
<random> std::mt19937 के साथ आधुनिक पुस्तकालय HPC और वैज्ञानिक कंप्यूटिंग अनुप्रयोगों में बड़ी मात्रा में यादृच्छिक संख्या उत्पन्न करने के लिए उत्कृष्ट प्रदर्शन प्रदान करता है।
सॉफ्टवेयर परीक्षण
C++ अनुप्रयोगों में मजबूत कोड कवरेज और बग का पता लगाने को सुनिश्चित करने के लिए यादृच्छिक परीक्षण डेटा, फ़ज़ परीक्षण इनपुट और किनारे के मामले बनाएं।
सी ++ रैंडम नंबर जनरेशन कैसे काम करता है
rand() का एल्गोरिदम कार्यान्वयन पर निर्भर है। C++11 में std::mt19937 जैसे इंजन और वितरण अलग हैं; वितरण में कोई डिफ़ॉल्ट mt19937 इंजन नहीं होता।
rand() का एल्गोरिदम कार्यान्वयन पर निर्भर है। C++11 में std::mt19937 जैसे इंजन और वितरण अलग हैं; वितरण में कोई डिफ़ॉल्ट mt19937 इंजन नहीं होता।
std::random_device कार्यान्वयन पर निर्भर है और नियतात्मक इंजन भी उपयोग कर सकता है। हर प्लेटफ़ॉर्म पर अप्रत्याशित आउटपुट की गारंटी नहीं है।
व्यावहारिक सुझाव
नए कोड के लिए rand() से बचें
rand() का एल्गोरिदम कार्यान्वयन पर निर्भर है। C++11 में std::mt19937 जैसे इंजन और वितरण अलग हैं; वितरण में कोई डिफ़ॉल्ट mt19937 इंजन नहीं होता।
सीड स्पष्ट रूप से चुनें
स्थिर सीड से उसी इंजन का क्रम दोबारा मिलता है। C++ इंजन सिस्टम एंट्रॉपी से अपने-आप प्रारंभ नहीं होते; ज़रूरत पर सीड स्पष्ट रूप से चुनें।
उचित वितरण का उपयोग करें
समान पूर्णांक श्रेणियों के लिए, std::uniform_int_distribution का उपयोग करें। फ़्लोटिंग-पॉइंट नंबरों के लिए, std::uniform_real_distribution का उपयोग करें। यह उचित सांख्यिकीय गुण सुनिश्चित करता है।
तकनीकी निर्देश
एल्गोरिदम
- rand() का एल्गोरिदम कार्यान्वयन पर निर्भर है। C++11 में std::mt19937 जैसे इंजन और वितरण अलग हैं; वितरण में कोई डिफ़ॉल्ट mt19937 इंजन नहीं होता।
- मर्सेन ट्विस्टर (std::mt19937)
- std::random_device कार्यान्वयन पर निर्भर है और नियतात्मक इंजन भी उपयोग कर सकता है। हर प्लेटफ़ॉर्म पर अप्रत्याशित आउटपुट की गारंटी नहीं है।
प्रदर्शन गुण
- रैंड (): तेज लेकिन खराब यादृच्छिकता गुणवत्ता
- <random>: उत्कृष्ट गुणवत्ता के साथ तेजी से
- std::mt19937: बड़ी मात्रा के लिए बहुत तेज़
अक्सर पूछे जाने वाले प्रश्न
कौन-कौन से C++ तरीके शामिल हैं?
srand() के साथ क्लासिक rand(), आधुनिक <random> लाइब्रेरी, std::uniform_int_distribution और mt19937 इंजन।
क्या मैं उदाहरणों को अपनी आवश्यकता के अनुसार ढाल सकता हूँ?
हाँ। पैरामीटर पैनल में न्यूनतम, अधिकतम और मात्रा सेट करें और आउटपुट देखने के लिए चलाएँ।
आजकल कौन सा तरीका अनुशंसित है?
नामित वितरण और इंजन के साथ <random> लाइब्रेरी; rand() पुराने कोड में अभी भी मिलता है लेकिन उसकी गुणवत्ता कमज़ोर है और श्रेणी संबंधी कमियाँ हैं।
मैं जनरेटर को सीड कैसे करूँ?
std::random_device कार्यान्वयन पर निर्भर है और नियतात्मक इंजन भी उपयोग कर सकता है। हर प्लेटफ़ॉर्म पर अप्रत्याशित आउटपुट की गारंटी नहीं है।
C++ में rand() कौन सी रेंज लौटाता है?
rand() 0 से RAND_MAX तक दोनों सीमाओं सहित मान देता है। प्लेटफ़ॉर्म जाँचें: Microsoft CRT में सीमा 32767 है; अन्य कार्यान्वयन में अलग हो सकती है।
क्या rand() क्रिप्टोग्राफ़िक रूप से सुरक्षित है?
rand() और std::mt19937 क्रिप्टोग्राफ़िक जनरेटर नहीं हैं। सुरक्षा के लिए दस्तावेज़ित क्रिप्टोग्राफ़िक लाइब्रेरी या OS API उपयोग करें; std::random_device सभी प्लेटफ़ॉर्म पर सुरक्षा की गारंटी नहीं देता।
C++ में यादृच्छिक फ़्लोट कैसे उत्पन्न करें?
std::mt19937 को std::uniform_real_distribution के साथ अपने अंतराल के अनुसार कॉन्फ़िगर करके जोड़ें, उदाहरण के लिए 0.0 से 1.0, फिर dist(generator) कॉल करें। परिणाम एक double होता है जिसमें निचली सीमा सम्मिलित होती है लेकिन ऊपरी सीमा सम्मिलित नहीं होती।
क्या C++ में rand() थ्रेड-सुरक्षित है?
rand() की थ्रेड सुरक्षा कार्यान्वयन पर निर्भर है। हर थ्रेड का अलग इंजन रखें या साझा इंजन का उपयोग सिंक्रोनाइज़ करें।
C++ standard draft: rand / srand · C++ standard draft: random_device · C++ standard draft: uniform_int_distribution
संदर्भ और संसाधन
-
C++ <random> Reference - cppreference
C++ स्यूडो-रैंडम संख्या जनरेशन लाइब्रेरी का आधिकारिक संदर्भ।
-
Mersenne Twister - Wikipedia
अधिकांश भाषाओं की रैंडम लाइब्रेरी के पीछे का Mersenne Twister एल्गोरिद्म।