مولد الأعداد العشوائية C++
تعلم كيفية توليد أرقام عشوائية بلغة C++ مع أمثلة أكواد تفاعلية. استكشف rand()، srand()، <random> المكتبة، std::uniform_int_distribution، و std::mt19937 مع شروحات مفصلة.
هل تحتاج إلى رقم عشوائي سريع؟
جرب مولد الأرقام العشوائية عبر الإنترنت للحصول على نتائج فورية دون الحاجة لكتابة أي شيفرة.
محرر الشيفرة C++
تعلم كيفية توليد أرقام عشوائية بلغة C++ مع أمثلة أكواد تفاعلية. استكشف rand()، srand()، <random> المكتبة، std::uniform_int_distribution، و std::mt19937 مع شروحات مفصلة.
الإنتاج
الإخراج المحاكى (C++ يعمل على الخادم)
انقر على "تشغيل الكود" لرؤية مخرجات مثال
C++ الكلاسيكي مع rand()
استخدم دالة rand() التقليدية من <cstdlib> لتوليد أعداد صحيحة عشوائية. بسيطة ومدعومة على نطاق واسع، رغم أنها غير مناسبة للتطبيقات التشفيرية بسبب ضعف جودة العشوائية.
فهم توليد الأعداد العشوائية في C++
توفر C++ عدة طرق لتوليد أرقام عشوائية، تتطور من دالة rand() البسيطة في C إلى <random> المكتبة الحديثة في C++11. يستخدم النمط الكلاسيكي rand() مولد متطابق خطي (LCG) ويتم تدميره ب srand()، بينما يستخدم النهج الحديث خوارزمية Mersenne Twister ويوفر فئات توزيع مختلفة لحالات استخدام مختلفة.
rand() Function
دالة rand() الكلاسيكية <cstdlib> من توفر توليد أرقام زائفة عشوائية بسيطة. مزروعة ب srand()، تستخدم خوارزمية مولد التوافق الخطي (LCG). مناسب للتطبيقات الأساسية لكنه ليس لأغراض التشفير.
<random> Library
<random> توفر المكتبة (C++11+) توليد أرقام عشوائية حديثة مع std::mt19937 (Mersenne Twister)، وتوزيعات متنوعة مثل uniform_int_distribution، وجودة عشوائية أفضل من rand().
uniform_int_distribution
يوفر std::uniform_int_distribution تحكمًا دقيقًا في نطاقات الأعداد الصحيحة مع توزيع موحد
std::mt19937
ينفذ std::mt19937 خوارزمية Mersenne Twister، مما يوفر خصائص إحصائية ممتازة وأداءً سريعًا
حالات الاستخدام الشائعة
الألعاب والمحاكاة
قم بتوليد رميات نرد عشوائية، سحب بطاقات، توليد إجرائي، وأحداث اللعبة باستخدام rand() أو <random> المكتبة الحديثة في حلقات اللعبة والمحاكاة.
الأمن والتشفير
لتطبيقات الأمان، فكر في استخدام مكتبات تشفير متخصصة. ال RAND() القياسي غير آمن تشفيريا. استخدم مولدات أرقام عشوائية آمنة خاصة بالمنصة لكلمات المرور والرموز.
الحوسبة عالية الأداء
<random> توفر المكتبة الحديثة مع std::mt19937 أداء ممتازا لتوليد كميات كبيرة من الأرقام العشوائية في تطبيقات الحوسبة عالية الأداء والحوسبة العلمية.
اختبار البرمجيات
إنشاء بيانات اختبار عشوائية، ومدخلات اختبار الضباب، والحالات الإضافية لضمان تغطية قوية للشيفرة واكتشاف الأخطاء في تطبيقات C++.
كيف يعمل توليد الأرقام العشوائية ب C++
الدالة الكلاسيكية next = (a * current + c) ٪ m. التسلسل حتمي ويجب أن يزرع ب srand()".
تستخدم مكتبة
std::random_device يوفر مصدرا محددا للمنصة لزراعة محركات الأرقام العشوائية، مما يضمن وجود تسلسلات مختلفة في كل مرة يعمل فيها البرنامج.
نصائح خبراء لتوليد C++ العشوائي
تجنب rand() لصالح الكود الجديد
بالنسبة لكود C++ الجديد (C++11 وما بعده)، يفضل
دائما بذور السراند()
إذا كنت تستخدم rand()، اتصل دائما ب srand(std::time(0)) عند بدء البرنامج لزرع المولد. وإلا، ستحصل على نفس التسلسل في كل مرة. مع
استخدم التوزيعات المناسبة
للحصول على نطاقات صحيحة موحدة، استخدم std::uniform_int_distribution. بالنسبة لأرقام الأعداد العائمة، استخدم std::uniform_real_distribution. وهذا يضمن الخصائص الإحصائية المناسبة.
المواصفات الفنية
الخوارزميات
- المولد الخطي المتطابق (دالة راند)
- تعاصفة ميرسين (تاريخ الميلاد::mt19937)
- مصدر إنتروبيا خاص بالمنصة (تاريخ معقد::random_device)
خصائص الأداء
- rand(): سريع لكن جودة عشوائية ضعيفة
- <random>: سريعة بجودة ممتازة
- std::mt19937: سريع جدًا للكميات الكبيرة