Нищівне скасування

Матеріал з testwiki
Перейти до навігації Перейти до пошуку

Шаблон:Короткий опис У чисельних методах, нищівне скасування[1][2] — це явище коли віднімання двох хороших наближень двох близьких чисел може породити дуже погане наближення різниці двох початкових чисел.

Наприклад, якщо маємо дві дошки, одна L1=254.5см завдовшки, а інша L2=253.5см завдовжки, і ми виміряємо їх лінійкою, точність якої лише сантиметр, тоді наближення будуть L~1=255см і L~2=253см. Ці наближення можуть бути хорошими у сенсі відносної похибки, до справжніх довжин: наближення відхились менш ніж на 2 % від справжніх довжин, |L1L~1|/|L1|<2%.

Однак, якщо наближені довжини відняти, то різниця буде L~1L~2=255см253см=2см, хоча справжня різниця між довжинами становить L1L2=254.5см253.5см=1см. Різниця між наближенням, 2см, має похибку в 100% від розміру різниці справжніх значень, 1см.

Нищівне скасування може статись навіть якщо різниця обчислена точно, як у прикладі вище — це не властивість якогось певного різновиду арифметики як-от з рухомою комою; радше це притаманне відніманню, коли входи це наближення. Насправді, в арифметиці з рухомою комою, коли входи достатньо близькі, вислід обчислення різниці точний, згідно з Шаблон:Нп немає похибки заокруглення через дію віднімання з рухомою точкою.

Формальний розгляд

Формально, нищівне знищення відбувається, бо віднімання погано обумовлене на близьких входах: навіть, якщо наближення x~=x(1+δx) і y~=y(1+δy) мають малі відносні похибки |δx|=|xx~|/|x| і |δy|=|yy~|/|y| щодо справжніх значень x і y, відповідно, відносна похибка наближеної різниці x~y~ від справжньої різниці xy зворотно пропорційна справжній різниці:

x~y~=x(1+δx)y(1+δy)=xy+xδxyδy=xy+(xy)xδxyδyxy=(xy)(1+xδxyδyxy).

Отже, відносна похибка точної різниці наближень x~y~ щодо різниці справжніх чисел xy це

|xδxyδyxy|.

І вона може бути наскільки завгодно великою якщо справжні числа x і y близькі.

У числових алгоритмах

Приклад: Різниця квадратів

Маючи числа x і y, наївна спроба обчислити математичну функцію x2y2 з використанням арифметики з рухомою точкою fl(fl(x2)fl(y2)) призведе до нищівного скасування, якщо x і y близькі величини, бо віднімання може виявити похибки заокруглення під час піднесення до квадрату. Альтернативне представлення (x+y)(xy), обчислене в арифметиці з рухомою точкою таким чином fl(fl(x+y)fl(xy)), уникає нищівного скасування, бо уникає похибки заокруглення.[2]

Наприклад, якщо x=1+2291.0000000018626451 і y=1+2301.0000000009313226, тоді справжнє значення різниці x2y2 це 229(1+230+231)1.8626451518330422×109. В арифметиці IEEE 754 binary64, обчислення (x+y)(xy) дає правильний результат (без округлення), тоді як обчислення наївного виразу x2y2 повертає таке число з рухомою точкою 229=1.86264514923095703125_×109, де правильні менш ніж половина цифр, а інші (підкреслені) цифри відображають загублені доданки 259+260, втрачені через заокруглення під час обчислення проміжних квадратних значень.

Примітки

Шаблон:Reflist