Инструментальные погрешности арифметических машинных команд из-за различия и непредсказуемости величины ошибки результата нарушают дистрибутивный, ассоциативный и коммутативный законы арифметики. Каждый же программист, составляя программу, уже на уровне интуиции пользуется ими, как незыблемыми. Отсюда различие в точности тех или иных вычислительных алгоритмов и трудно уловимые ошибки.
Проследить накопление вычислительной погрешности алгоритма для операндов, которые имеют производные, удобно, если результат r каждой двуместной арифметической операции умножать на множитель с последующим разложением результирующей функции алгоритма по степеням этого множителя или этих множителей, если в группах операторов отличаются по величине. Например, для алгоритма вычисления значения полинома
третьей степени по схеме Горнера с псевдокодом
P:=0; j:=3;
repeat
S:=a[j]*x+a[j-1];
P:=P+S*x;
j:=j-1;
until j=1;
функция алгоритма будет:
Учитывая, что , последнее выражение дает возможность после раскрытия скобок выделить из суммы и оценить сначала абсолютную погрешность, а по абсолютной погрешности - относительную:
Условные арифметические операторы с проверкой равенства операндов необходимо заменять проверкой вида: .