Foundationপ্রথম নীতি থেকে
LEVEL 1 · How Computers Represent Information

Catastrophic Cancellation

ক্যাটাস্ট্রফিক ক্যান্সেলেশন

প্রায়-সমান দুইটা float বিয়োগ করলে leading significant digit বাতিল হয়ে যায় — absolute error প্রায় অপরিবর্তিত থাকে, কিন্তু ফলাফল ছোট হওয়ায় relative error বিস্ফোরিত হয়।

also: cancellation error, loss of significance

relative error=absolute error (অপরিবর্তিত)ফলাফলের মান (হঠাৎ ছোট)\text{relative error} = \frac{\text{absolute error (অপরিবর্তিত)}}{\text{ফলাফলের মান (হঠাৎ ছোট)}}

বিয়োগ operation নিজে সঠিক (IEEE 754-এর correctly-rounded গ্যারান্টি) — সমস্যা upstream-এর already-imprecise operand-এ, যা বিয়োগের পর magnify হয়।

Classic উদাহরণ — quadratic formula (Goldberg-এর পেপার): x² − 100000x + 1 = 0, float32-এ। disc = b²−4ac-এ 4 সংশোধনটা এই magnitude-এর ULP (1024)-এর চেয়ে ছোট, rounding-এই হারিয়ে যায়। ফলে \sqrt{disc} = 100000.0 ঠিক -b-এর সমান — x_1 = (-b-\sqrt{disc})/2a = 0.0 সম্পূর্ণ ভুল (প্রকৃত মান \approx 0.00001)। সমাধান — Vieta’s formula: x_1 = c/(a \cdot x_2), বিয়োগ এড়িয়ে।

সাধারণ প্রতিকার: যেখানে সম্ভব সূত্র পুনর্বিন্যাস করে প্রায়-সমান সংখ্যার বিয়োগ এড়ানো (conjugate multiply, Vieta’s formula, Taylor series-এর পুনর্লিখন)। [[ieee-754]]-এর correctly-rounded গ্যারান্টি এখানে সাহায্য করতে পারে না — সমস্যাটা algorithm-এর গঠনে, single operation-এর নির্ভুলতায় নয়।