Погрешность машинного округления#
Представление чисел в памяти компьютера#
Действительные числа в машинном представлении приходится округлять до \(K\) цифр после запятой. При этом число \(x\), имеющее машинное представление \(X\), находится где-то в диапазоне
Величина \(\Delta X\) назвается абсолютной погрешностью представления \(x\).
Относительная погрешность представления чисел в арифметике с плавающей точкой зависит от количества используемых цифр \(K\), но не от самого числа \(x\):
Стоит отметить, что двойка здесь потому, что числа в компьютере хранятся именно в двоичной системе счисления.
Стандартом IEEE 754 определяются несколько форматов представления чисел в компьютере. Самыми распространенными являются
одинарная точность, single precision (
float
в C). Имеет \(K = 23\) и обеспечивает относительную точность \(\delta = 2^{-24} \approx 5.96 \cdot 10^{-8}\)двойная точность, double precision (
double
в C). Имеет \(K = 52\) и обеспечивает относительную точность \(\delta = 2^{-53} \approx 1.11 \cdot 10^{-16}\)
Таким образом, погрешность округления произвольного числа \(A\) в компьютере можно определить, зная его тип (float или double), из которого мы получаем \(\delta\). Тогда погрешность округления будет \(\varepsilon_\text{round} = \delta \cdot A\).
Накопление ошибок округления#
Cуммируя величину \(\displaystyle S_n = \sum_{k=0}^{n-1} a_n\) в машинной арифметике, мы на самом деле суммируем округленные величины. Каждое слагаемое \(a_n\) представлено с абсолютной погрешностью \(\Delta a_n \leqslant |a_n| \cdot \delta\), где \(\delta\) — относительная ошибка округления.
Так как при суммировании чисел их абсолюная погрешность суммируется, при вычислении \(S_n\) накопится ошибка $\( \Delta S_n \leqslant \varepsilon_\text{round} = \sum_{k=0}^{n-1} |a_n| \cdot \delta = \delta \cdot \sum_{k=0}^{n-1} |a_n|. \)$
Таблица погрешностей операций#
Погрешности округления для основных операций (а только в них, как правило, умеют компьютеры) выглядят следующим образом (Здесь \(\varepsilon_\text{round}=\Delta\))
\(\Delta(a \pm b)=\Delta a+\Delta b\)
\(\Delta\left(a^m\right)=m \cdot a^{m-1} \Delta a\)
\(\Delta(a \cdot b)=a \cdot b[\delta(a)+\delta(b)]=b \Delta a+a \Delta b\)
\(\Delta(a / b)=\frac{a}{b}[\delta(a)+\delta(b)]=\frac{b \Delta a+a \Delta b}{b^2}\)
Источник: «Е.Г. Агапова - Вычислительная математика»
В случае вычислений погрешности «на бумаге», адекватной оценкой погрешности вполне может служить линейное приближение, но стоит помнить, что на компьюетере :
Пример - погрешность округлений конечно-разностной схемы
Вспомним, что функция \(f(x)\) вычисляется с погрешностью \(\Delta f\). При вычислении
из-за приближенных значений \(f(x_0 + h)\), \(f(x_0)\) и \(h\) появляется ошибка округления
соответственно. Эта ошибка при уменьшении \(h\) растет как \(O(h^{-1})\).
Отсюда понимаем, что не имеет смысла уменьшать \(h\) до нуля, т.к. это лишь приведёт к увеличению ошибки округления, которая может «съесть» весь выйгрыш от уменьшения ошибки метода. Отсюда следует существование некоторого оптимального шага, при котором суммарная погрешность минимизируется.