Смекни!
smekni.com

Арифметические основы ЦВМ (стр. 6 из 6)

Рассмотрим еще одну ситуацию, типичную для операции над числами в форме с плавающей запятой.

Пусть необходимо вычислить разницу чисел

X=13,45 и Y=13,45*10**(-5) ,

при условии, что они представлены в форме с плавающей запятой при разрядности мантиссы, равной 4, и порядка, равной 2. Для простоты операцию проиллюстрируем на примере десятичной системы счисления.

Запишем числа Х и Y в форме с плавающей запятой:

X: 1 3 4 5 + 0 2

Y: 1 3 4 5 - 0 3

Как видно из этой записи, оба числа представлены в форме с плавающей запятой без искажения. Не воспроизводя логику вычитания, принятую в ЭВМ, выполним вычитание в столбик. Для этого представим оба операнда в естественной форме и так, чтобы соответствующие разряды операндов находились друг под другом :

X: 1 3 , 4 5

Y: 0 , 0 0 1 3 4 5

=============

X-Y: 1 3 , 4 4 8 6 5 5

Округлим результат, учитывая, что в нашем распоряжении для записи цифр числа имеется всего 4 разряда, и запишем его вновь в форме с плавающей запятой, в заданной разрядной сетке:

X-Y:1 3 4 5 + 0 0

Сравнив результат с исходными операндами увидим, что хотя оба операнда были отличны от нуля, результат и уменьшаемое полностью совпадают!

Вывод. При вычитании двух чисел большое значение имеют соотношение их величин и разрядность мантисс, используемая для их кодирования. Так что программисты могут столкнуться с нежелательными последствиями выполнения указанных действий в некоторых критических местах алгоритма. Например, если подобное вычитание выполняется в условии прекращения цикла, имеющем вид “(X-Y)>0.01”, то данное условие может никогда не выполниться, т.е. произойдет так называемое зацикливание.

Дополнительная литература по материалу раздела.

1. Савельев А.Я. Прикладная теория цифровых автоматов. Учебник для втузов. М.: 1989.