Рассмотрим простейшую гипотетическую ЭВМ в предположениях:
1. Все числа удовлетворяют условию .
2. ЭВМ имеет запоминающее устройство, в котором можно хранить m разрядов.
3. ЭВМ может выполнять операции сложения, вычитания и умножения в накопителе 2m разрядов.
4. ЭВМ может выполнять операцию деления, причем первые m разрядов величины помещаются в специальный счетчик, т.е. машина может округлять числа в накопителе путем прибавления к ним и отбрасывания последних m разрядов.
Чтобы можно было произвести действия сложения и вычитания, нужно потребовать, чтобы были выполнены следующие условия:
, .
Округлять при этом не придется, и следовательно, ошибок округления не возникает. Если нужно перемножить два каких-то числа, находящихся в каких-то ячейках запоминающего устройства, то модуль результата всегда будет меньше 1, а сам результат не может иметь более 2m разрядов. Таким образом, и в этом случае округлений не потребуется. Но если этот результат придется выводить в какую-то ячейку запоминающего устройства или выводить из машины, то придется сделать округление. При этом мы уже не получим точного произведения.
|
|
Обозначим результат округления произведения как , отличая его от точного произведения . Будем называть псевдопроизведением. Аналогично обозначим результат округления деления как , который будем называть псевдоделением. Тогда
,
.
Пусть теперь нужно образовать сумму произведений. При этом возможно получить сначала в специальном накопителе точную сумму произведений, а потом произвести округление. Такую псевдооперацию будем обозначать . Таким образом,
.
При этом не все свойства обычных арифметических операций сохранятся для псевдоопераций. Так, например, дистрибутивный закон. Выражение , а , так как в первом случае производится одно псевдоумножение, а во втором два. Таким образом,
.
Числа, разность которых стоит под знаком модуля, могут отличаться друг от друга на величину, кратную 2e, т.е. кратную единице последнего разряда. Поэтому
.
Рассмотрим пример. Предположим, что , и нам нужно найти
(0,364 + 0,423)∙0,125
При этом
,
.
Мы как раз получили разницу в единицу последнего знака.
Порядок, в котором производятся операции умножения и делении, также будет иметь значение.
Пусть нам требуется найти величину . При этом
и, следовательно,
.
Аналогично получим:
.
Отсюда
.
Проводя те же рассуждения, что и в предыдущем случае, найдем:
.
Рассмотрим пример. Предположим, что , и нам нужно найти . При этом
и .
В то же время
и .
Пусть необходимо вычислить выражение . Будем предполагать, что , , и все операции можно произвести на нашей ЭВМ.
|
|
При вычислении этого выражения в различной последовательности получим разные результаты.
Вычислим сначала и затем найдем . При этом
Второй член правой части оценивается без труда:
.
Оценим первый член, предполагая, что , т.е. мало. Для того чтобы было возможно произвести деление, потребуем, чтобы . Так как
,
то или . В первом случае оцениваемый член будет близок к
,
во втором – к
.
Точное частное при и будет и погрешность составляет около 25%.
Так как для некоторых значений х*, у*, z* мы получили неудовлетворительный результат, то возьмем другую последовательность операций. Разделим сначала х* на у* и результат поделим на z*. Оценим
.
Рассмотрим только первый член. Результат будет зависеть от того, что больше: у* или z*. Лучший результат получится при . Рассмотрим этот случай. Так как (иначе деление невозможно было бы выполнить на машине), то . Т.к. , то . Отсюда
.
Полученный результат лучше, чем предыдущий. Если немало, то первый способ вычислений может оказаться лучше второго.