Я прочитал это
(1) Плохо обусловленные операции должны выполняться до хорошо подготовленных.
Например, нужно вычислить как (xy) z, поскольку вычитание плохо обусловлено, а умножение - нет.
Однако анализ ошибок первого порядка обоих алгоритмов показывает, что они различаются только в три раза (*), и я не понимаю, почему можно обобщить это в утверждении (1), и при этом я интуитивно не понимаю значение порядок действий. Как вы думаете, утверждение (1) является принятым правилом, и есть ли у вас другие объяснения для него?
*: более конкретно, первая версия имеет относительную ошибку, ограниченную
где - точность машины.
Этот анализ основан на предположении, что промежуточный результат умножается на (из-за ошибок округления), где - это случайные переменные iid, ограниченные . «Первый порядок» означает, что членами высшего порядка, такими как , пренебрегают.
источник
Ответы:
Обозначим через (мне было лень пытаться получить обведенную версию оператора деления) аналоги с плавающей запятой точного умножения ( ), сложения ( ) и вычитания ( ) соответственно. Предположим (IEEE-754), что для всех них где - машинный эпсилон, дающий верхнюю границу относительной ошибки из-за округления. Мы также будем использовать следующую лемму (при условии, что все , а не слишком велика), которую легко доказать: × + - [ x ⊕ y ] = ( x⊗,⊕,⊖ × + − ϵ m a c h | δ я | ≤ ϵ m a c h m m ∏ i = 1 ( 1 + δ
Давайте определим истинную функцию которая работает с действительными числами какf x,y,z
и две версии реализации функции в IEEE-совместимой арифметике с плавающей точкой, такие как и которые работают с представлениями с плавающей точкой , следующим образом:f1~ f2~ x~=x(1+δx),y~,z~
Анализ ошибок для :f1~
Аналогично, для Здесь .f2~
Итак, для и мы получили выражения одного типа, поэтому я не понимаю, почему одна реализация предпочтительнее другой с числовой точки зрения (за исключением того факта, что выполняет только 2 операции с плавающей точкой по сравнению с ).f1~ f2~ f2~ f1~
Вычисление относительной ошибки покажет, что проблема связана с тем, что и могут быть очень близки ( отмена ).x y
Незначительные различия между могут сделать одну из двух числовых реализаций незначительно лучше или хуже в зависимости от . Однако я сомневаюсь, что это может иметь какое-либо значение. Результат полностью имеет смысл, потому что, независимо от того, что, если вам нужно вычислить , когда и достаточно близки по значениям (для точности, с которой вы работаете), используя арифметику с плавающей точкой, никакое масштабирование не поможет вам: ты уже в беде.x , y , z ( x - y ) x yθ x,y,z (x−y) x y
NB: Все обсуждения выше предполагают, что нет переполнения или недостаточного значения, то есть , - набор всех нормальных чисел с плавающей точкой.F 0x,y,z,f(x,y,z)∈F0 F0
источник