2.2.4. Ошибка вычисления

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

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

Закрыть

Так, при выполнении фрагмента программы

INTEGER(2)  MMM

MMM=32756

WRITE (*,*) MMM+705

MMM=MMM+705

WRITE(*,*) 'MMM= ',MMM

сообщение об ошибках компиляции и выполнения не возникает (например, в среде Compaq Visual Fortran), но значение переменной MMM равно –32075, в отличие от значения выражения mmm+705, равного 33461. Это связано с тем, что для размещения целой переменной MMM с разновидностью типа 2 отводится 2 байта, и ее значение должно находиться в пределах –32768  до +32767, т.е. переменная этого типа может принимать 65536 различных значений. После выполнения оператора присваивания MMM=MMM+705 переменная MMM принимает значение (MMM+705) MOD 65536 = –32075.

К ошибкам может привести и так называемый способ записи чисел с плавающей точкой (или запятой), при котором число записывается в виде значащей части (мантиссы) и порядка. Поэтому такие числа, как или  в форме с плавающей точкой всегда будут записаны приближенно:

0.33333333

0.66666666 или  0.66666667, если происходит округление.

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

При выполнении действий в системах с плавающей точкой на конечной разрядной сетке происходит нарушение некоторых законов алгебры, как, например, ассоциативного и дистрибутивного [Кнудт Д. Искуссиво программирования для ЭВМ. Т. 2]:  и , что также способствует накоплению ошибки.