• 0
مصطفى 36a2

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

سؤال

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

يُمكن باستخدام التابع 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 قيمة مختلفة للعدد العشوائي المولد

 

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

0 إجابة على هذا السؤال .

لاتوجد إجابات على هذا السؤال حتى الآن .

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .