الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

توليد عدد عشوائي من نوع double

بدأه مصطفى 36a2 في 18 مارس 2016 · 0 رد · 402 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1

السلام عليكم ورحمة الله وبركاته

يُمكن باستخدام التابع rand  الموجود في مكتبة cstdlib توليد عدد شبه عشوائي من نوع int تقع قيمته بين 0 و RAND_MAX (وهي قيمة محددة في مكتبة stdlib.h بقيمة 32767، وفيما يلي مثالٌ بسيط:

#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
int main()
{
    srand(time(0));
    cout<<rand()<<endl;
    return 0;
}

قمنا في الشيفرة السابقة بتحديد بذرة الأعداد العشوائية seed عن طريق التابع srand، حيث مررنا قيمة (0)time التي تعيد عدد اللحظات التي مرت منذ 1/1/1970 حتى لحظة استدعاء التابع.

والسؤال هو: كيف يُمكن توليد عدد عشوائي بين قيمتين نحدّدهما نحن؟

سنقوم بتحديد القيمة عن طريق المتراجحات الرياضية التالية:

0<rand<32768
بإضافة العدد a
a<rand+a<32768+a
بأخذ باقي القسمة على b (بفرض b أكبر من a)
a<(rand+a)%b<b

ما سأطرحه اليوم، هو طريقة مغايرة للطريقة السابقة، تسمح لنا بتوليد عدد عشوائي من نوع double مع تحديد قيمته بين عددين، وفق العلاقات التالية:

0<rand<32768
بقسمة جميع الأطراف على 32768
0<double(rand)/32768<1
والآن نقوم بضرب جميع الأطراف بالقيمة b-a
0<(double(rand)/32768)*(b-a)<b-a
بإضافة العدد a
a<(double(rand)/32768)*(b-a)+a<b
يكون لدينا عدد عشوائي بين a و b من نوع double، ولكن لا ننسى أنه سيكون هناك فقط 32768 قيمة مختلفة للعدد العشوائي المولد

 

والله ولي التوفيق

مواضيع مشابهة