"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني إنشاء أرقام عشوائية موزعة بشكل موحد ضمن نطاق معين في C++؟

كيف يمكنني إنشاء أرقام عشوائية موزعة بشكل موحد ضمن نطاق معين في C++؟

تم النشر بتاريخ 2024-12-21
تصفح:894

How Can I Generate Uniformly Distributed Random Numbers Within a Specific Range in C  ?

توليد أرقام عشوائية موحدة عبر نطاق

أنت تبحث عن طريقة لتوليد أرقام عشوائية موحدة ضمن نطاق محدد [دقيقة، كحد أقصى].

عيوب في rand

قد لا يضمن تطبيقك الحالي باستخدام rand() ومشغل المعامل التوزيع الموحد، لأن سلوكه يعتمد على RAND_MAX والنطاق نفسه.

C 11 وتوليد النطاق الموحد

في C 11، std::uniform_int_distribution يقدم حلاً مصممًا خصيصًا لهذه الحاجة:

#include 

std::uniform_int_distribution distr(min, max);
std::random_device rand_dev;
std::mt19937 generator(rand_dev());

int random_number = distr(generator);

ميزات إضافية لـ

يوفر الرأس مجموعة واسعة من مولدات الأرقام العشوائية بتوزيعات مختلفة، مثل مثل بيرنولي وبواسون وعادي.

خلط الحاويات

إلى خلط حاوية، استخدم std::shuffle:

#include #تشمل std::vector vec = {4, 8, 15, 16, 23, 42}; std::random_device Random_dev; std::mt19937 generator(random_dev()); std::shuffle(vec.begin(), vec.end(), generator);
#include 
#include 

std::vector vec = {4, 8, 15, 16, 23, 42};
std::random_device random_dev;
std::mt19937 generator(random_dev());

std::shuffle(vec.begin(), vec.end(), generator);

Boost.Random

إذا كان استخدام مترجم C 11 غير ممكن ، فكر في Boost.Random، الذي يتميز بواجهة مشابهة لنظيره C 11.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3