PDA

View Full Version : گفتگو: باگ جالب سی شارپ در ضرب یک float در یک double



Javad_raouf
دوشنبه 27 شهریور 1396, 09:19 صبح
سلام
یک باگ عجیبی C#‎‎‎‎‎‎ داره که وقتی یک عدد اعشاری float رو در یک عدد double ضرب می کنیم نتیجه اشتباه بر می گردونه:متعجب:
همین الان ویژوال استادیو رو باز کنید و این کد رو بنویسید:

float Num1 = 85.6F;
double Num2 = 1000;
double Num3 = Num1 * Num2;
MessageBox.Show(Num3.ToString());

طبیعتا توقع دارید نتیجه عدد 85600 باشه ولی این طور نیست:متعجب:
جوابی که بر می گرده این عدده:
85599.9984741211
یعنی چیزی نزدیک به جواب:لبخند:
خیلی برام جالبه و می خوام بدونم علتش چیه کسی می دونه؟

جالب اینجااست که اگر عدد اول float نباشه یا عدد دوم double نباشه این مشکل پیش نمیاد:افسرده:
به نظر شما مشکل چیه؟:لبخندساده:

Javad_raouf
دوشنبه 27 شهریور 1396, 09:22 صبح
توی نسخه های متفاوت ویژوال استادیو و با ورژن های مختلف دات نت فریم ورک هم تست کردم همین مشکل هست:متفکر:
به نظرم باگ نیست وگرنه تا الان فهمیده بودن بلکه یک دلیل منطقی داره که من نمی دونم:لبخندساده:

ژیار رحیمی
دوشنبه 27 شهریور 1396, 23:12 عصر
مشکل باگ نیست ،ماهیت ذخیره سازی اعداد در متغییر اعشاری از نوع float بصورت ممیز شناور هست.این تفاوت مقدار در تبدیل حالت ممیز شناور به اعشاری رخ میدهد.

Javad_raouf
چهارشنبه 29 شهریور 1396, 11:09 صبح
مشکل باگ نیست ،ماهیت ذخیره سازی اعداد در متغییر اعشاری از نوع float بصورت ممیز شناور هست.این تفاوت مقدار در تبدیل حالت ممیز شناور به اعشاری رخ میدهد.

اینو توی سایت های خارجی خوندم ولی نفهمیدم معنیشو
گفتم کسی شاید مفهومی بتونه توضیح بده:لبخندساده: