вернуться в оглавление предыдущая глава предыдущий параграф следующий параграф следующая глава


Приложение А. Погрешности вычислений

Абсолютная и относительная погрешности

Точность полученного в результате вычисления результата определяется погрешностью вычислений. Различают два вида погрешностей – абсолютную и относительную.

Абсолютная погрешность некоторого числа равна разности между его истинным значением и приближенным значением, полученным в результате вычисления или измерения:

          (А.1)

где а – приближенное значение числа х.

Относительная погрешность – это отношение абсолютной погрешности к приближенному значению числа:

           (А.2)

Истинное значение величины х обычно неизвестно. Имеется лишь приближенное значение а и нужно найти его предельную погрешность . В дальнейшем значение  принимается в качестве абсолютной погрешности приближенного числа а. Тогда истинное значение х находится в интервале .

Источники погрешностей

Рассмотрим различные причины возникновения погрешностей.

Математическая модель задачи является неточной

Погрешность возникает из-за того, что сам численный метод или математическая модель является лишь приближением к точному методу (например, дифференцирование). Кроме того, любая математическая модель или метод могут внести существенные погрешности, если в ней не учтены какие-то особенности рассматриваемой задачи. Модель может прекрасно работать в одних условиях и быть совершенно неприемлемой в других. Такую погрешность называют также методической. Она всегда имеет место, даже при абсолютно точных данных и абсолютно точных вычислениях. В большинстве случаев погрешность численного метода можно уменьшить до требуемого значения за счет изменения параметров метода (например, уменьшением шага дискретизации, или увеличением количества итераций).

Ошибки в исходных данных

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

Следует стремиться к тому, чтобы все исходные данные были примерно одинаковой точности. Сильное уточнение одних исходных данных при наличии больших погрешностей в других не приводит к повышению точности конечных результатов. Если какие-то отдельные точки данных (измерения) явно ошибочные, их можно исключить из вычислений.

Вычислительные ошибки (ошибки округления)

Ошибки этого типа проявляются из-за дискретной (а не непрерывной) формы представления величин в компьютере. Вычислительные ошибки можно свести к минимуму продуманно организовывая алгоритмы.

Вычислительные ошибки

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

Представление чисел с плавающей точкой

Для хранения целых чисел (int, long, unsigned int и т.д.) обычно отводится 4 байта памяти, что позволяет представлять целые числа, находящиеся примерно в диапазоне от .

В вычислениях чаще используются вещественные числа (float, double). Такие числа представляются в компьютере в форме с плавающей точкой, и хранятся в логарифмическом виде – мантисса и порядок:

          (А.3)

где m – мантисса, p – порядок, а – основание степени.

Мантисса записывается в нормализованной форме – с фиксированной точкой, подразумеваемой после первой значащей цифры. Нормализованной формой числа с плавающей точкой называется такая форма, в которой мантисса десятичного числа (без учёта знака) принимает значения , а мантисса двоичного числа принимает значения от .

Например, число 273.9 можно представить в виде  или в компьютерном представлении 2.739E+02.

В таблице А.1 приводится диапазон допустимых значений и другие параметры для чисел с плавающей точкой одинарной (float) и двойной (double) точности.

Точность Одинарная Двойная
Размер (байты) 4 8
Наименьшее значение 1.2·10−38 2.3·10−308
Наибольшее значение 3.4×10+38 1.7×10+308
Размеры степени и мантиссы (биты) 8-23 11-52

Таблица A.1. Диапазон чисел, представимых в формате с плавающей точкой

Для чисел с плавающей точкой существует понятие машинного эпсилон – наименьшего положительного число ε такого, что . Например, для числа с одинарной точностью 1 + 0.00000001 = 1. Для одинарной точности , а для двойной точности .

Погрешность округления

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

Перевод чисел из одной системы счисления в другую также может быть источником погрешности из-за того, что основание одной системы счисления не является степенью основания другой (например, 10 и 2). Это может привести к тому, что в новой системе счисления число невозможно представить абсолютно точно, например:

0.1 = 0.10000000000000001

299.8 = 299.80000000000001

8059807621.14 = 8059807621.1400003

Погрешность арифметических действий над приближенными числами

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

 ,           (А.4)

При возведении в степень приближенного числа его относительная погрешность умножается на показатель степени:

          (А.5)

При сложении или вычитании чисел их абсолютные погрешности складываются:

           (А.6)

Относительная погрешность суммы положительных слагаемых вычисляется как:

.          (А.7)

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

.          (А.8)

На практике для оценки погрешности при сложении чисел обычно используют максимальную погрешность .

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

1234 + 0.005678 = 1234.00005678

или в компьютерном представлении:

1.234Е+03 + 5.678Е-03 = 1.234005678Е+03

После сложения количество значащих цифр равно 10. Число с одинарной  точностью (float) позволяет хранить только 8 значащих цифр, то есть на самом деле число будет равно 1.2340056Е+03. Две значащие цифры потерялись в процессе сложения. Потеря точности здесь возникает из-за того, что при прибавлении к большому числу малых чисел результат сложения выходит за пределы точности при округлении. Для того чтобы уменьшить погрешность вычислений, нужно складывать числа в порядке возрастания их абсолютной величины. Таким образом можно минимизировать абсолютную величину промежуточной погрешности при каждом сложении.

Рассмотрим теперь вычитание чисел (сложение чисел разного знака, или вычитание чисел одного знака). В соответствии с выражением (А.7) относительная погрешность может быть очень большой в случае, если числа близки между собой, так как даже при малых погрешностях  результат их сложения в знаменателе может быть очень малым. Чтобы уменьшить погрешность при вычитании, необходимо строить вычислительные алгоритмы таким образом, чтобы избегать вычитания близких чисел.

Таким образом, можно сделать вывод, что сложение и вычисление являются плохо обусловленными (неустойчивыми) операторами, так как при некоторых данных даже небольшая погрешность в исходных данных может привести к большой погрешности результата. Уменьшить погрешность можно за счет правильной последовательности операций. Из-за погрешности округления в машинной арифметике важен порядок выполнения операций, и известные из алгебры законы коммутативности (и дистрибутивности) здесь не всегда выполняются.