PDA

View Full Version : سوال: تبدیل اعداد تصادفی به بازه [0 1]



abasfar
شنبه 16 اردیبهشت 1391, 14:09 عصر
سلام
دوستان من اعداد تصادفی در بازه a,b را تولید کرده ام حالا میخوام به بازه [1 0]تغییر بدم
یک فرمول ریاضی هست میشه راهنمایی کنید

soroushp
شنبه 16 اردیبهشت 1391, 22:10 عصر
منظورتون از تابع ریاضی چیه ؟ تو c++ کد زیر اعداد بین 0 و 1 تولید می کنه :
x=((double)rand() / (double) RAND_MAX)
تو C# هم تابع آماده داره که بازه بین 0 و 1 تولید می کنه

abasfar
شنبه 16 اردیبهشت 1391, 22:16 عصر
ممنون دوست عزیز از جواب شما
اما من چیز دقیقی میخوام که پارامترهای حد پایین و بالا ، معیین باشه
خودش هم تابع رندم را من خودم میسازم
فرض کنید اعداد تصادفی من بین 5 و 10 باشه
حالا با برگشت مقدار 5 => 0
10=>1
7=>0.5
و...

soroushp
یک شنبه 17 اردیبهشت 1391, 09:16 صبح
اگر درست منظورتون رو متوجه شده باشم ، شما می خواین برای تابع رندم تون که بین 0 و 1 هست حد تعیین کنید ، خب ابتدا رندم بین 0 و 1 رو بسازید ، سپس شرط بذارین که مثلا :

x=0;
if(x<=0.125)
j=1;


من هنوز منظورتون رو از فرمول ریاضی نفهمیدم

abasfar
یک شنبه 17 اردیبهشت 1391, 12:36 عصر
اگر درست منظورتون رو متوجه شده باشم ، شما می خواین برای تابع رندم تون که بین 0 و 1 هست حد تعیین کنید ، خب ابتدا رندم بین 0 و 1 رو بسازید ، سپس شرط بذارین که مثلا :

x=0;
if(x<=0.125)
j=1;


من هنوز منظورتون رو از فرمول ریاضی نفهمیدم

نه خیر دوست عزیز
خروجی تابع رندم اعداد در بازه a,b هستند مثالی که زدم تو پست دوم این a,b شده بودند 5تا 10 که تبدیل میشدند به بازه 0و1

مسعود اقدسی فام
یک شنبه 17 اردیبهشت 1391, 17:03 عصر
از این تبدیل استفاده کنید:

(y=(x-a)/(b-a

abasfar
یک شنبه 17 اردیبهشت 1391, 20:11 عصر
ممنون مسعود جان


یاشاسین بیزیم اغا مسعوده که افتخاریمیزده

پس شد

y=(rand()-a)/(b-a)

فقط چون عددم خیلی بزرگ میشه یک کلاس ساختم که با ان بتونم عدد با ممیز شناور را ذخیره کنم

مسعود اقدسی فام
دوشنبه 18 اردیبهشت 1391, 00:35 صبح
ممنون مسعود جان

پس شد

y=(rand()-a)/(b-a)

فقط چون عددم خیلی بزرگ میشه یک کلاس ساختم که با ان بتونم عدد با ممیز شناور را ذخیره کنم

یاشاسین.

البته در عمل تقسیم به زبان‌هایی مثل ++C باید به اعشاری بودن یکی از طرفین تقسیم توجه کرد. وگرنه خارج قسمت تقسیم تولید می‌شه.

مسعود اقدسی فام
دوشنبه 18 اردیبهشت 1391, 11:07 صبح
در حالت کلی برای تبدیل خطی از بازه a تا b به بازه c تا d از این رابطه استفاده می‌شه:



y = ( ( x - a ) / ( b - a ) ) * ( d - c ) + c

Salar Ashgi
دوشنبه 25 اردیبهشت 1391, 11:31 صبح
البته این موضوع بارها بررسی شده .

خیلی ساده عدد تصادفی تون رو بین صفر و 10 تولید کنید و بعد نتیجه رو تقسیم بر 10 کنید ./

abasfar
دوشنبه 25 اردیبهشت 1391, 15:34 عصر
ممنون دوست عزیز از جواب شما
خوب اگه بازه را از صفر شروع میکردم دیگه چرا تا 10،
یک دفعه از بازه 0 تا 1 در نظر میگرفتم دیگه
جواب درست من گرفتم که اقای مسعود گل گفتند