stringtranslate.com

Катастрофическая отмена

В численном анализе катастрофическое сокращение [1] [2] представляет собой явление, при котором вычитание хороших приближений двух соседних чисел может привести к очень плохому приближению к разнице исходных чисел.

Например, если есть два стержня, один длинный, а другой длинный, и они измерены линейкой, которая хороша только до сантиметра, то приближения могут получиться и . Это могут быть хорошие приближения, в относительной погрешности , к истинным длинам: приближения имеют погрешность менее 2% от истинных длин, .

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

Катастрофическое погашение не зависит от того, насколько велики входные данные — оно применимо как к большим, так и к малым входным данным. Оно зависит только от того, насколько велика разница , и от погрешности входных данных. Точно такая же ошибка возникнет при вычитании из как приближений к и , или при вычитании из как приближений к и .

Катастрофическое сокращение может произойти, даже если разница вычисляется точно, как в примере выше — это не свойство какого-либо конкретного вида арифметики, например, арифметики с плавающей точкой ; скорее, это присуще вычитанию, когда входные данные сами являются приближениями. Действительно, в арифметике с плавающей точкой, когда входные данные достаточно близки, разница с плавающей точкой вычисляется точно, согласно лемме Стербенца — нет ошибки округления, вносимой операцией вычитания с плавающей точкой.

Формальный анализ

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

Таким образом, относительная погрешность точного отличия приближений от отличия истинных значений равна

которые могут быть сколь угодно большими, если истинные значения и близки.

В численных алгоритмах

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

Пример: Разность квадратов

При наличии чисел и наивная попытка вычислить математическую функцию с помощью арифметики с плавающей точкой подвержена катастрофическому сокращению, когда и близки по величине, поскольку вычитание может выявить ошибки округления при возведении в квадрат. Альтернативное разложение , оцененное с помощью арифметики с плавающей точкой , позволяет избежать катастрофического сокращения, поскольку оно позволяет избежать внесения ошибки округления, ведущей к вычитанию. [2]

Например, если и , то истинное значение разности равно . В двоичной арифметике IEEE 75464 оценка альтернативного факторинга дает точный результат (без округления), но оценка наивного выражения дает число с плавающей точкой , в котором менее половины цифр являются правильными, а другие (подчеркнутые) цифры отражают пропущенные члены , потерянные из-за округления при вычислении промежуточных квадратов значений.

Пример: комплексный арксинус

При вычислении комплексной функции арксинуса может возникнуть соблазн использовать логарифмическую формулу напрямую:

Однако предположим, что для . Тогда и ; назовем разницу между ними — очень маленькую разницу, почти нулевую. Если вычисляется в арифметике с плавающей точкой, давая

с любой ошибкой , где обозначает округление с плавающей точкой, затем вычисление разницы

из двух соседних чисел, оба очень близкие к , может усилить ошибку в одном входе в раз — очень большой раз, поскольку был близок к нулю. Например, если , истинное значение приблизительно равно , но использование наивной логарифмической формулы в двоичной арифметике IEEE 754 может дать , при этом только пять из шестнадцати цифр будут правильными, а все остальные (подчеркнутые) неверны.

В случае для использование тождества позволяет избежать сокращения, поскольку но , поэтому вычитание фактически является сложением с тем же знаком, которое не сокращается.

Пример: преобразование системы счисления

Числовые константы в программах часто записываются в десятичной системе счисления, например, во фрагменте C для объявления и инициализации переменной IEEE 754 binary64 с именем . Однако не является числом с плавающей точкой binary64; ближайшее число, которое будет инициализировано в этом фрагменте, — . Хотя преобразование основания из десятичного числа с плавающей точкой в ​​двоичное число с плавающей точкой приводит лишь к небольшой относительной ошибке, катастрофическое сокращение может усилить ее до гораздо большей:double x = 1.000000000000001;xx

double x = 1.000000000000001 ; // округлено до 1 + 5*2^{-52} double y = 1.000000000000002 ; // округлено до 1 + 9*2^{-52} double z = y - x ; // разница составляет ровно 4*2^{-52}              

Разница составляет . Относительные погрешности от и от ниже , а вычитание с плавающей точкой вычисляется точно по лемме Стербенца.xyy - x

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

Доброкачественная отмена

Отмена иногда полезна и желательна в числовых алгоритмах. Например, алгоритмы 2Sum и Fast2Sum оба полагаются на такую ​​отмену после ошибки округления, чтобы точно вычислить, какой была ошибка в операции сложения с плавающей точкой как само число с плавающей точкой.

Функция , если ее оценить наивно в точках , потеряет большинство цифр при округлении . Однако сама функция хорошо обусловлена ​​на входах вблизи . Переписывая ее как использует отмену в , чтобы избежать ошибки от прямой оценки. [2] Это работает, потому что отмена в числителе и отмена в знаменателе противодействуют друг другу; функция достаточно хорошо обусловлена ​​вблизи нуля, что дает хорошее приближение к , и, таким образом, дает хорошее приближение к .

Ссылки

  1. ^ Мюллер, Жан-Мишель; Бруни, Николас; де Динешен, Флоран; Жаннерод, Клод-Пьер; Джолдес, Миоара; Лефевр, Винсент; Мелькионд, Гийом; Револь, Натали ; Торрес, Серж (2018). Справочник по арифметике с плавающей запятой (2-е изд.). Gewerbestrasse 11, 6330 Шам, Швейцария: Биркхойзер. п. 102. дои : 10.1007/978-3-319-76526-6. ISBN 978-3-319-76525-9.{{cite book}}: CS1 maint: location (link)
  2. ^ abc Goldberg, David (март 1991 г.). «Что каждый специалист по информатике должен знать об арифметике с плавающей точкой». ACM Computing Surveys . 23 (1). Нью-Йорк, штат Нью-Йорк, США: Ассоциация вычислительной техники: 5–48. doi : 10.1145/103162.103163. ISSN  0360-0300. S2CID  222008826. Получено 17 сентября 2020 г.