مشاهده نسخه کامل
: مشکل با اعداد اعشاری
با سلام
من یه بازه احتمالی دارم از صفر تا یک که به چند قسمت تقسیم شده. ممکنه در هر مرحله از الگوریتم یکی از این بازه ها رو حذف کنم. با اینکار باید احتمال اونو به صورت مساوی بین همه باره های باقی مانده تقسیم کنم. در پایان کار باید بازه های حذف شده رو دوباره برگردونم. اما حاصل کار(مجموع احتمالات) دیگه یک نمیشه. تو رو خدا کمک کنید بد جوری گیر کردم.
یکم توضیح بیشتر لطفا، همچنین کدتونو بذارید این جا، یا حداقل الگوریتمو
mahdi_mbi
26-09-2010, 00:39
با سلام
من یه بازه احتمالی دارم از صفر تا یک که به چند قسمت تقسیم شده. ممکنه در هر مرحله از الگوریتم یکی از این بازه ها رو حذف کنم. با اینکار باید احتمال اونو به صورت مساوی بین همه باره های باقی مانده تقسیم کنم. در پایان کار باید بازه های حذف شده رو دوباره برگردونم. اما حاصل کار(مجموع احتمالات) دیگه یک نمیشه. تو رو خدا کمک کنید بد جوری گیر کردم.
فکر کنم مشکل به این خاطر باشه که در سیستم های کامپیوتری اعداد اعشاری با تعداد ارقام اعشار محدودی ذخیره می شوند؛ یعنی اعداد اعشاری واقعی در سیستم های کامپیوتری وجود خارجی ندارند و اعداد، abstract هستند؛ برای مثال حاصل کسر 2/3 در مجموعه اعداد حقیقی به صورت ...0.6666666 (ارقام اعشار نامتناهی) هست، ولی در کامپیوتر این مقدار با ارقام اعشار متناهی (مثلا به صورت 0.66666667) ذخیره میشه.
برای حل این مشکل پیشنهاد میکنم که یک کلاس که معرف یک کسر گویا است تعریف کنید تا اعداد را به صورت کسر ذخیره کند (نه به صورت اعداد اعشاری) تا مشکل از دست دادن برخی از ارقام اعشار حل بشه؛ اینجوری جمع احتمال ها حتما یک میشه.
سوال داشتید بپرسید:10:
ببخشید من سیستمم مادربردش سوخت تا بردم تعمیر و درست کرد چند روز کشید. راستش من وقتشو ندارم که این کلاس رو بنویسم میشه شما راهنمایی کنی چه چیزایی این کلاس می خواد. نمیشه بدون کلاس یه جوری مشکل رو حل کرد.
دوستان این قسمتی از کد هست تو کلاس اول یک ایتم تولید شده که یک شناسه و یک کران پایین و بالای برای احتمال ایتم داره. تو کلاس دوم یه لیست تعریف شده که شامل تعدادی ایتم از کلاس قبله. این کلاس یه تابع داره به اسم SetEqualProb که میاد مقدار 1 تقسیم بر تعداد گره های لیست رو به عنوان احتمال هر گره به ایتم های لیست تخصیص میده. تو یه قسمت دیگه از برنامه یه تابع دارم که یه عدد تصادفی بین 0 تا 100 تولید میکنه و به 100 تقسیمش میکنه تا عددی بین 0 و1 به دست بیاد بعد باید تو این لیست بگرده و گره ای که این احتمال تو محدوده اون قرار داره برگردونه. من این تابع رو نوشتم اما درست کار نمیکنه. یکی کمکم کنه.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد رو بررسی میکنم و نتیجه رو میگم
-------
ببین برای همه ی محاسباتت یا عددا از Double یا Float استفاده کردی یا نه؟؟؟ این مورد خیلی مهمه، احتمال میدم مشکلت همین باشه
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.