انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: sajadspeed در 16 بهمن 1401، 12:13 ب‌ظ

عنوان: ممیز شناور نادرست در پایتون(حل شد)
ارسال شده توسط: sajadspeed در 16 بهمن 1401، 12:13 ب‌ظ
سلام دوستان چند وقته با اضافه شدن یکسری اعداد اعشاری توی چند تا سیستم که از پایتون و JS(NodeJS) استفاده می‌کرد به مشکلی برخورد کردیم. عملیات ضرب زیر را ببینید:
1.1*3خوب قاعدتا باید جواب 3.3 باشه ولی پایتون و JS این جواب میدن:
3.3000000000000003بعد از سرچ متوجه شدم مال استاندارد IEEE-754 برای ممیز شناور هستش، مثلا الان ++C و ‌PHP مشکلی نداشتن و جواب درست می‌دادن.

حالا بهترین راه‌حل برای رفع این مشکل چیه؟
میشه کلا اعشار از هزارم دیگه در نظر نگرفت، میشه رندش کرد حتی، ولی موضوع اینه که در این سیستم باید اعداد به شکل دقیق حساب بشن و نمیشه یه راه‌حل کلی برای برای تمام اعداد پیاده کرد.

در ضمن تا حد زیادی متوجه شدم از جزئیات این مشکل و فرمت binary64 ولی از دوستان کسی بیشتر هم در مورد خود ماهیت این مسئله توضیح داد در کنار راه‌حل ممنون میشم.
عنوان: پاسخ : ممیز شناور نادرست در پایتون
ارسال شده توسط: دانیال بهزادی در 16 بهمن 1401، 02:22 ب‌ظ
همون‌طور که می‌دونی این مربوط به روش محاسبه در رایانه می‌شه. واقعاً هم برای کارهای عادی، دقت ده به توان منفی ۱۷ نیاز نیست و جواب درسته. اگه داریم کار محاسباتی دقیق می‌کنیم، مثلاً برای فناوری‌های نانو، از کتابخونه‌های مخصوصش استفاده می‌‌کنیم که این مسائل توش رعایت شده.
عنوان: پاسخ : ممیز شناور نادرست در پایتون
ارسال شده توسط: sajadspeed در 16 بهمن 1401، 03:35 ب‌ظ
خوب ببینید من دقیق نتونستم مطالعه کنم، که کامل به این نحوه محاسبه مسلط بشم. الان پس می‌فرمایید این باگ بیشتر از 17-^10 نمیشه؟ تعداد ارقام اعشاری که در این سیستم وارد میشه ۶ تا است، پس من تمام اعداد فقط با ۶ رقم ممیز حساب کنم ایرادی پیش نمیاد؟
عنوان: پاسخ : ممیز شناور نادرست در پایتون
ارسال شده توسط: دانیال بهزادی در 17 بهمن 1401، 01:08 ق‌ظ
نه. هیچ مشکلی نیست.
عنوان: پاسخ : ممیز شناور نادرست در پایتون
ارسال شده توسط: sajadspeed در 17 بهمن 1401، 12:00 ب‌ظ
ممنون که وقت گذاشتید.