C++ رینڈم نمبر جنریٹر

سیکھیں کہ C++ میں انٹرایکٹو کوڈ کی مثالوں کے ساتھ رینڈم نمبرز کیسے تیار کیے جائیں۔ rand(), srand(), <random> library, std::uniform_int_distribution, اور std::mt19937 کو تفصیلی وضاحتوں کے ساتھ دریافت کریں۔

متعدد طریقے بہترین طریقے فوری نقل

کیا آپ کو ایک فوری رینڈم نمبر چاہیے؟

ہمارے آن لائن رینڈم نمبر جنریٹر کو آزما کر فوری نتائج حاصل کریں بغیر کوئی کوڈ لکھے۔

اوپن رینڈم نمبر جنریٹر

C++ کوڈ ایڈیٹر

سیکھیں کہ C++ میں انٹرایکٹو کوڈ کی مثالوں کے ساتھ رینڈم نمبرز کیسے تیار کیے جائیں۔ rand(), srand(), <random> library, std::uniform_int_distribution, اور std::mt19937 کو تفصیلی وضاحتوں کے ساتھ دریافت کریں۔

آؤٹ پٹ

سیمولیٹڈ آؤٹ پٹ (C++ سرور پر چلتا ہے)

مثال آؤٹ پٹ دیکھنے کے لیے "Run Code" پر کلک کریں

کلاسک C++ رینڈ() کے ساتھ

روایتی rand() فنکشن استعمال <cstdlib> کریں تاکہ رینڈم انٹیجرز پیدا کیے جا سکیں۔ سادہ اور وسیع پیمانے پر سپورٹڈ ہے، اگرچہ کرپٹوگرافک ایپلیکیشنز کے لیے مناسب نہیں کیونکہ اس کی بے ترتیبی کی کوالٹی خراب ہے۔

C++ رینڈم نمبر جنریشن کو سمجھنا

C++ تصادفی اعداد پیدا کرنے کے متعدد طریقے فراہم کرتا ہے، جو C میں سادہ rand() فنکشن سے جدید <random> لائبریری C++11 تک ارتقاء پذیر ہوتے ہیں۔ کلاسک رینڈ() لینیئر کنگروئنشل جنریٹر (LCG) استعمال کرتا ہے اور اسے srand() سے سیڈ کیا جاتا ہے، جبکہ جدید طریقہ مرسین ٹوسٹر الگورتھم استعمال کرتا ہے اور مختلف استعمالات کے لیے مختلف تقسیم کلاسز فراہم کرتا ہے۔

rand() Function

کلاسک رینڈ() فنکشن <cstdlib> سے سادہ پیسوڈو-رینڈم نمبر جنریشن فراہم کرتا ہے۔ srand() کے ساتھ سیڈ کیا گیا، یہ لینیئر کنگروئنشل جنریٹر (LCG) الگورتھم استعمال کرتا ہے۔ بنیادی ایپلیکیشنز کے لیے موزوں ہے لیکن کرپٹوگرافک مقاصد کے لیے نہیں۔

<random> Library

<random> لائبریری (C++11+) جدید رینڈم نمبر جنریشن فراہم کرتی ہے جس میں std::mt19937 (مرسین ٹوسٹر)، مختلف تقسیمات جیسے uniform_int_distribution، اور رینڈ() سے بہتر رینڈمنیس کوالٹی فراہم کرتی ہے۔

uniform_int_distribution

std::uniform_int_distribution یکساں تقسیم کے ساتھ عددی رینجز پر درست کنٹرول فراہم کرتا ہے۔ شماریاتی ایپلیکیشنز، سمولیشنز اور جب عین رینج کنٹرول درکار ہو کے لیے بہترین۔

std::mt19937

std::mt19937 Mersenne Twister الگورتھم کو نافذ کرتا ہے، بہترین شماریاتی خصوصیات اور بہت لمبا پیریڈ (2^19937-1) فراہم کرتا ہے۔

عام استعمال کے کیسز

گیمنگ اور سیمولیشنز

رینڈ() یا <random> جدید لائبریری ان گیم لوپس اور سیمولیشنز کے ذریعے رینڈم ڈائس رولز، کارڈ ڈرا، پروسیجرل جنریشن، اور گیم ایونٹس تیار کریں۔

سیکیورٹی اور کرپٹوگرافی

سیکیورٹی ایپلیکیشنز کے لیے، خصوصی کرپٹوگرافک لائبریریز استعمال کرنے پر غور کریں۔ معیاری رینڈ() کرپٹوگرافک طور پر محفوظ نہیں ہے۔ پاس ورڈز اور ٹوکنز کے لیے پلیٹ فارم مخصوص محفوظ رینڈم نمبر جنریٹرز استعمال کریں۔

ہائی پرفارمنس کمپیوٹنگ

<random> جدید لائبریری std::mt19937 کے ساتھ HPC اور سائنسی کمپیوٹنگ ایپلیکیشنز میں بڑی مقدار میں بے ترتیب اعداد پیدا کرنے کے لیے بہترین کارکردگی فراہم کرتی ہے۔

سافٹ ویئر ٹیسٹنگ

C++ ایپلیکیشنز میں مضبوط کوڈ کوریج اور بگ ڈیٹیکشن کو یقینی بنانے کے لیے رینڈمائزڈ ٹیسٹ ڈیٹا، فز ٹیسٹنگ ان پٹس، اور ایج کیسز تیار کریں۔

C++ رینڈم نمبر جنریشن کیسے کام کرتی ہے

C++ کا کلاسک <کوڈ class="bg-gray-100 px-2 py-1 rounded">rand() فنکشن (from ) لینیئر کنگروئنشل جنریٹر (LCG) الگورتھم استعمال کرتا ہے۔ یہ فارمولا استعمال کرتے ہوئے جعلی تصادفی اعداد تیار کرتا ہے: next = (a * current + c) ٪ m۔ یہ سلسلہ ڈیٹرمنسٹک ہے اور اسے srand()" کے ساتھ سیڈ کیا جانا چاہیے۔

جدید <کوڈ class="bg-gray-100 px-2 py-1 rounded"> لائبریری (C++11+) مرسین ٹوسٹر الگورتھم (std::mt19937) استعمال کرتی ہے، جو بے ترتیبی کی کوالٹی اور شماریاتی خصوصیات بہت بہتر فراہم کرتا ہے۔ یہ مختلف استعمالات کے لیے مختلف تقسیم کی کلاسز جیسے uniform_int_distribution، normal_distribution، اور bernoulli_distribution بھی پیش کرتا ہے۔

std::random_device ایک پلیٹ فارم مخصوص انٹروپی کا ذریعہ فراہم کرتا ہے تاکہ رینڈم نمبر انجنز کو سیڈ کیا جا سکے، تاکہ ہر بار پروگرام چلنے پر مختلف سیکوئنسز یقینی بنائیں۔

C++ رینڈم جنریشن کے لیے ماہرین کے مشورے

🎯

نئے کوڈ کے لیے rand() سے گریز کریں

نئے C++ کوڈ (C++11 اور بعد میں) کے لیے، لائبریری کو rand()/srand() پر ترجیح دیں۔ یہ بہتر بے ترتیبی، زیادہ لچک، اور تھریڈ محفوظ آپریشنز فراہم کرتا ہے۔

🔒

آلویز سیڈ سرینڈ()

اگر آپ rand() استعمال کر رہے ہیں، تو ہمیشہ srand(std::time(0)) کو پروگرام میں سیڈ کرنے کے لیے کال کریں۔ ورنہ، آپ کو ہر بار ایک ہی سلسلہ ملے گا۔ جب ، سیڈنگ خودکار طریقے سے سنبھالی جاتی ہے۔

مناسب تقسیمات استعمال کریں

یکساں عددی رینجز کے لیے، std::uniform_int_distribution استعمال کریں۔ فلوٹنگ پوائنٹ نمبرز کے لیے، std::uniform_real_distribution استعمال کریں۔ یہ درست شماریاتی خصوصیات کو یقینی بناتا ہے۔

تکنیکی خصوصیات

الگورتھمز

  • لینیئر کنگروئنشل جنریٹر (رینڈ فنکشن)
  • مرسین ٹوسٹر (مواصلہ::mt19937)
  • پلیٹ فارم مخصوص انٹروپی ماخذ (std::random_device)

کارکردگی کی خصوصیات

  • rand(): تیز لیکن بے ترتیبی کی کوالٹی کمزور
  • <random>: تیز اور بہترین معیار
  • std::mt19937: بڑی مقدار کے لیے بہت تیز