خطای عددی: چرا کامپیوتر ۰٫۱ + ۰٫۲ را دقیقاً ۰٫۳ نمی‌بیند؟

تحلیل عددی خطا

اعداد اعشاری در کامپیوتر به‌صورت دودویی ذخیره می‌شوند و بسیاری از کسرهای ده‌دهی (مثل 0.10.1) در مبنای دو بی‌پایان‌اند. به همین دلیل در بیشتر زبان‌ها حاصل 0.1+0.20.1+0.2 برابر 0.300000000000000040.30000000000000004 است. این خطای گردکردن است و از مرتبهٔ 10−1610^{-16} در دقت دوگانه.

سه خطای مهم در محاسبات عددی:


• خطای گردکردن: ناشی از نمایش محدود اعداد.
• خطای قطع (truncation): ناشی از تقریب فرمول؛ مثلاً قطع سری تیلور یا استفاده از f(x+h)−f(x)h\dfrac{f(x+h)-f(x)}{h} به‌جای مشتق.
• خطای مدل و داده: ناشی از اندازه‌گیری و ساده‌سازی مسئله.

حذف ارقام معنادار. تفریق دو عدد تقریباً برابر ارقام درست را از بین می‌برد. مثلاً برای xx بزرگ، x+1−x\sqrt{x+1}-\sqrt{x} دقت کمی دارد، ولی شکل معادل

x+1−x=1x+1+x\sqrt{x+1}-\sqrt{x}=\frac{1}{\sqrt{x+1}+\sqrt{x}}

پایدار است. قاعدهٔ عملی: عبارت را طوری بازنویسی کنید که تفریق اعداد نزدیک پیش نیاید.

معیار توقف. در روش‌های تکراری هرگز برابری دقیق (pn=pn−1p_n=p_{n-1}) را آزمایش نکنید؛ از ∣pn−pn−1∣<ε|p_n-p_{n-1}|<\varepsilon استفاده کنید و تعداد تکرار را هم محدود کنید.

MathTech همه‌جا از محاسبات دوگانه استفاده می‌کند و برای هر روش معیار توقف و حداکثر تکرار را در فرم قرار داده است.