Рассмотрим специфику операции сложение-вычитание с плавающей запятой. Число Х, представленное в форме с плавающей запятой, имеет вид:
,
где p – порядок числа, М – мантисса, k – основание системы счисления. Если каждому числу Х однозначно соответствует пара p, k, то 1>|M|³k-1, а число Х называется нормализованным.
Порядок и мантисса числа записываются в своих разрядах в виде чисел с фиксированной запятой; мантисса – в виде дробного числа с запятой перед старшим из основных разрядов, порядок – в виде целого числа с запятой после младшего разряда. Структура представления в ЭВМ числа с плавающей запятой более подробно рассмотрена в гл.I п.1. Разрядная сетка машины с плавающей запятой имеет следующий вид:
m
-1 - n
±
Порядок
±
Мантисса
В нормализованных числах мантисса содержит максимальное количество значащих цифр, поэтому нормализованные числа представляются с максимальной точностью.
Выполнение операции сложения-вычитания чисел с плавающей запятой состоит из следующих этапов:
- выравнивание порядков;
- суммирование мантисс;
- определение порядка результата;
- нормализация результата;
- округление результата.
Выравнивание порядков осуществляется путем сдвига вправо мантиссы числа с меньшим порядком. Так как сдвиг вправо эквивалентен делению мантиссы на k, то при каждом сдвиге порядок должен увеличиваться на 1. Порядок результата принимается равным порядку большего числа. В результате алгебраического сложения мантисс после выравнивания порядка получают мантиссу суммы (разности). Полученная сумма (разность) нормализуется.
Для выполнения операции выравнивания порядка используется сумматор порядков, в котором из порядка первого числа вычитают порядок второго числа. По знаку разности определяют больший порядок, а абсолютная величина разности позволяет определить необходимое число сдвигов.
При сравнении порядков возможны пять случаев:
а) px - pyn, где n – число разрядов мантиссы, при этом в качестве результата сразу берется первое слагаемое, поскольку при выравнивании порядков все разряды мантиссы второго слагаемого принимают нулевые значения;
б) px - py < n – второе слагаемое является результатом суммирования;
г) px - py = k1 (k1 < n) – мантисса второго слагаемого сдвигается на k1 разрядов вправо, затем мантиссы суммируются;
д) py - px = k2 (k2 < n) – мантисса первого слагаемого сдвигается на k2 разрядов вправо, затем мантиссы суммируются.
Мантиссы, полученные после выравнивания порядков, складываются как двоичные числа с фиксированной запятой. При этом результат может оказаться ненормализованным. Если используются модифицированные коды, то переполнение (левое нарушение нормализации) определяется по комбинациям цифр 01 и 10 в знаковых разрядах суммы мантисс. Нормализация заключается при этом в сдвиге мантиссы результата вправо на 1 разряд. Правое нарушение нормализации определяется по комбинациям цифр 00,0 (11,1) в старшем и знаковом разрядах мантиссы результата. При этом нормализация результата заключается в сдвиге мантиссы результата влево до тех пор, пока не появится “1” (“0”) в старшем разряде сетки мантиссы.
При нормализации сдвиг вправо результата и отбрасывание его младшего разряда могут привести к большой положительной ошибке. Для уменьшения погрешности применяют округление, состоящее в использовании дополнительного разряда со стороны младших разрядов. Если в дополнительном разряде будет 1, то ее добавляют в младший основной разряд. Вследствие этого погрешность будет закономерной и не больше 2-n веса младшего разряда.