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

явище в чисельних методах
(Перенаправлено з Катастрофічне анулювання)

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

Наприклад, якщо маємо дві дошки, одна завдовшки, а інша завдовжки, і ми виміряємо їх лінійкою, точність якої лише сантиметр, тоді наближення будуть і . Ці наближення можуть бути хорошими у сенсі відносної похибки, до справжніх довжин: наближення відхились менш ніж на 2 % від справжніх довжин, .

Однак, якщо наближені довжини відняти, то різниця буде , хоча справжня різниця між довжинами становить . Різниця між наближенням, , має похибку в 100% від розміру різниці справжніх значень, .

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

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

Формально, нищівне знищення відбувається, бо віднімання погано обумовлене на близьких входах: навіть, якщо наближення   і   мають малі відносні похибки   і   щодо справжніх значень   і  , відповідно, відносна похибка наближеної різниці   від справжньої різниці   зворотно пропорційна справжній різниці:

 

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

 

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

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

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

Маючи числа   і  , наївна спроба обчислити математичну функцію   з використанням арифметики з рухомою точкою   призведе до нищівного скасування, якщо   і   близькі величини, бо віднімання може виявити похибки заокруглення під час піднесення до квадрату. Альтернативне представлення  , обчислене в арифметиці з рухомою точкою таким чином  , уникає нищівного скасування, бо уникає похибки заокруглення.[2]

Наприклад, якщо   і  , тоді справжнє значення різниці   це  . В арифметиці IEEE 754 binary64, обчислення   дає правильний результат (без округлення), тоді як обчислення наївного виразу   повертає таке число з рухомою точкою  , де правильні менш ніж половина цифр, а інші (підкреслені) цифри відображають загублені доданки  , втрачені через заокруглення під час обчислення проміжних квадратних значень.

Примітки ред.

  1. Muller, Jean-Michel; Brunie, Nicolas; de Dinechin, Florent; Jeannerod, Claude-Pierre; Joldes, Mioara; Lefèvre, Vincent; Melquiond, Guillaume; Revol, Nathalie; Torres, Serge (2018). Handbook of Floating-Point Arithmetic (вид. 2nd). Gewerbestrasse 11, 6330 Cham, Switzerland: Birkhäuser. с. 102. doi:10.1007/978-3-319-76526-6. ISBN 978-3-319-76525-9.
  2. а б Goldberg, David (March 1991). What every computer scientist should know about floating-point arithmetic. ACM Computing Surveys. New York, NY, United States: Association for Computing Machinery. 23 (1): 5—48. doi:10.1145/103162.103163. ISSN 0360-0300. S2CID 222008826. Процитовано 17 вересня 2020.