PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ساخت عددرندوم



ah rad
02-05-2012, 16:15
کسی میدونه چه جوری میشه بامگا32وزبان C اعدادرندوم(به کمک پیاده سازی باگیت های منطقی)تولید کرد؟
تروبخدا سریع جواب بدید کارم گیره!!cry::

ma-bah
02-05-2012, 18:23
با استفاده از نگاشتهای آشوبناک شما می تونید این کار رو بکنید .....

اینو تو گوگل سرچ کنید

random number generator with chaotic

با استفاده از دو سه تا رابطه ی ساده که شامل ضرب و تقسیم می شه می تونید این کار رو بکنید ..

ah rad
03-05-2012, 22:13
دوست عزیزم من سرچ کردم متنش انگلیسیه اصلا هیچی نفهمیدم(انگلیسی ما درحدبچه ابتدایی!!!)
اگه اماکنش هست براتون فرمولشو میشه بزارید به همراه مثال
درضمن یادم رفت بگم عدد ماباید دورقمی باشه ونمایشش باید روی دوتا سون سگمنت باشه

ah rad
06-05-2012, 20:55
نیست کسی دربرنامه نویسی عددرندوم کمکی کنه

esisafa
07-05-2012, 10:53
راه اصلی این کار استفاده از ریاضی آمار و احتمال هست. طبق احتمال برنامه ای درسته که اگه بینهایت بار عدد رندوم درست کنیم، متوسطش (واریانس) بشه وسط اون محدوده. به این میگن رندوم درست و حسابی. فکر کنم متلب خیلی روش کار کرده ولی هنوزم کاملا دقیق نیست.
فرمول هاش رو از یک ریاضیدان بپرسید تا تحقیق کنه و به شما بگه. چون تخصصی هست

ma-bah
07-05-2012, 16:37
رابطه ی زیر عدد رندوم در بازه ی 0 تا 1 تولید می کنه

x=4*x*(1-x)

این رابطه از نگاشت های معروف آشوبناک هست به نام logistic map و یک رابطه ی بازگشتی هست به این صورت که x جدیدی که بدست میاد در مرحله ی بعد باید به عنوان ورودی سیستم در نظر گرفت . برای اینکه بیشتر متوجه بشید اگر مقدار اولیه رو که خود شما حتما باید بین 0 تا 1 انتخاب کنید عدد 0.2 باشه (هر عدد با هر مقدار اعشار می تونه باشه من برای سادگی گفتم) x بعدی میشه 0.64 و دوباره این 0.64 به عنوان ورودی در نظر گرفته می شه تو مرحله ی بعد و x جدید میشه 0.9216 و به همین ترتیب

اگرم می خاید بین 0 تا 100 باشه عدد حاصله رو در 100 ضرب کنید
دوباره می گم شما حتما باید یه شرط اولیه یا به عبارتی مقدار اولیه رو خودتون در نظر بگیرید و برای اینکه حالت رندومی بیشتر باشه بهتره که بزارید حداقل 20 بار این رابطه ی بازگشتی انجام بشه بعد ازش عدد مورد نظر رو بگیرید

sarutobi
07-05-2012, 16:54
یه راهش هم میتونه این باشه که یه تایمر رو راه بندازی ، به این صورت که تایمر تا یه عدد معین ( مثلا 255 )رو بشماره و بعد صفر بشه ( سر ریز کنه ) ، این کار با سرعت زیاد انجام میشه و بعد باید عدد تایمر رو بخونید و اون رو با ضرب وتقسیم و جز صحیح به بازه رندوم و دلخواهتون برسونید

esisafa
07-05-2012, 20:00
رابطه ی زیر عدد رندوم در بازه ی 0 تا 1 تولید می کنه

x=4*x*(1-x)



مقدار اولیه و تعداد تکراری که به این رابطه بدیم خودش رندم نیست و جواب یکسان میده. اینجا رو چه کنیم.

ولی تایمر روش خیلی خوبی هست. البته اینم یک شرط داره که خیلی مهمه. باید تعداد کلاک های هر دوره اجرای برنامه با دفعه ی قبل یکی نباشه وگرنه اینم رندم نمیشه . به نظر شما میشه این کار رو کرد که هر دفعه که برنامه در حلقه ی بینهایت اجرا میشه یک جور نباشه؟؟؟؟؟
اگه برنامه شرطهای مختلفی با تعداد دستور متفاوت داشته باشه و دقت رندم بودن هم خیلی مهم نباشه میشه از تایمر استفاده کرد. به هر حال کلاک تایمر و کلاک اجرای برنامه یک ک.م.م (بزرگترین مضرب مشترک) داره چون منبعشون یکی هست.
البته اگه کلاک تایمر رو بیرونی بدین که مضربی از کلاک میکرو نباشه خیلی رندم تر میشه

agape
07-05-2012, 22:43
یکی از راه هایی که حتما هم کار میکنه استفاده از adc هست به این صورت که شما ابتدا یه دیود ژرمانیومی رو بایاس معکوس میکنی - این نوع بایاس یه جریان نشتی متغییر داره که اگه اونو تقویت کنی و با adc بخونی خودش یه مبنای تولید اعداد رندوم خوب هست

esisafa
08-05-2012, 11:35
یکی از راه هایی که حتما هم کار میکنه استفاده از adc هست به این صورت که شما ابتدا یه دیود ژرمانیومی رو بایاس معکوس میکنی - این نوع بایاس یه جریان نشتی متغییر داره که اگه اونو تقویت کنی و با adc بخونی خودش یه مبنای تولید اعداد رندوم خوب هست

یعنی جریان نشتی ژرمانیوم اینقدر فضایی تغییر میکنه. الان یک مقداری داره یک ثانیه بعد بیشتره. یک ثانیه بعد کمتره. و هر لحظه با قبل فرق میکنه و تا آخر ثابت نمیشه.
یا این روش هم یک ترفند خاصی داره که درست کار کنه. اگه ترفندی داره لطفا بگین

ali_h
08-05-2012, 23:21
سلام
من مطمئن نیستم منظورتون رو درست متوجه شده باشم یا نه
کامپایلرتون تابع rand نداره؟

behnam6500
08-05-2012, 23:26
جزوه درس شبیه سازی کامپیوتری (You can see links before reply)

ah rad
09-05-2012, 16:14
سلام
من مطمئن نیستم منظورتون رو درست متوجه شده باشم یا نه
کامپایلرتون تابع rand نداره؟

]چراداره درواقع کدویزنه
امانبایدازتابع اماده کدویزن استفاده کرد