Принципы выполнения арифметических операций над числами в форме с плавающей точкой, Сложение и вычитание чисел в форме с плавающей точкой - Компьютерная арифметика

Пусть требуется выполнить некоторую арифметическую операцию над операндами X и Y в форме с плавающей точкой:

. (5.12)

. (5.13)

Результатом операции будет число:

. (5.14)

Порядки чисел X и Y представлены p разрядами, а мантиссы - (m-разрядные) правильные дроби, то есть,

, . (5.15)

Сложение и вычитание чисел в форме с плавающей точкой

Представим операцию сложения в виде:

Z = X + Y. (5.16)

Пусть Рх > Py, тогда:

. (5.17)

Где

.

. (5.18)

Где

; .

Операция сложения и вычитания операндов в форме с плавающей точкой включает следующие этапы:

    - выравнивание порядков операндов и определение порядка результата; - сложение и вычитание мантисс; - нормализация результата; - округление результата.

Выравнивание порядков необходимо для того, чтобы цифры мантисс с определенными весами располагались в соответствующих им разрядах регистров. Выполняется такая операция путем сдвига вправо мантиссы того операнда, порядок которого меньше. (Не выравнивать в сторону меньшего порядка! -- теряем значащие цифры). Алгоритм выравнивания порядков сводится к следующему:

- сформировать разность порядков

.

    - если >0, то сдвинуть на один разряд вправо мантиссу (Y) и вычесть единицу из разности порядков( ); если - пункт 2 алгоритма повторять до тех пор, пока выполняется неравенство ?0; при =0 выравнивание порядков считают законченным.

Так как порядки операндов могут иметь разные знаки, то для представления их разности () может понадобиться (p+1) разряд. Абсолютная величина () может превышать число разрядов (m), отводимых для представления мантисс. В этом случае все разряды сдвигаемой вправо мантиссы выходят за пределы разрядной сетки и далее, при сложении и вычитании мантисс, абсолютная величина мантиссы, которая оставалась неподвижной, не меняется. Следовательно, при выполнении условия ||>m можно прекратить выравнивание порядков и присвоить окончательному результату значение операнда, мантисса которого не сдвигалась.

Определять порядок результата удобно вместе с выравниванием порядков операндов. Порядок результата равен порядку большего по абсолютной величине операнда (то есть, того, мантисса которого не сдвигалась при выравнивании порядков).

Сложение и вычитание мантисс, для представления которых обычно используется прямой код, выполняется по тем же алгоритмам, что и чисел в форме с фиксированной точкой. Однако переполнение разрядной сетки здесь не приводит к остановке вычислений, что, как правило, имеет место при выполнении операций над числами в форме с фиксированной точкой. Наличие переполнения учитывается далее при нормализации результата.

Поскольку при выравнивании порядков возможна потеря части разрядов мантиссы одного из операндов, то мантисса результата может быть получена с погрешностью, по абсолютной величине почти равной единице младшего разряда. Однако среднее значение погрешности при этом равно нулю, если считать, что знаки "+" и "-" операндов и заданных операций появляются с равными вероятностями. С целью уменьшения максимальной абсолютной величины этой погрешности может быть введена операция округления мантиссы результата.

Необходимость нормализации результата обусловлена тем, что при мантиссах операндов, удовлетворяющих условиям нормализации, в зависимости от знака операции, мантисса результата может находиться в пределах 0?|z|<2.

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

- если 1?|z|<2 (нормализация нарушена влево), то сдвинуть мантиссу результата на один разряд вправо и прибавить единицу к порядку результата.

При этом может возникнуть переполнение порядков.

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

Если 0<|z|<1/2, то сдвинуть мантиссу влево и вычесть единицу из порядка результата. Эти действия продолжать до тех пор, пока сохраняются условия указанного выше неравенства (если мантисса результата представлена прямым кодом, то до тех пор, пока в старшем разряде мантиссы в результате сдвига появится единица). В этом случае может возникнуть антипереполнение.

Если |z|=0, то результату присваивается машинный нуль (потеря значимости), а выполнять нормализацию нет необходимости.

При использовании модифицированного дополнительного кода для вычитания левое нарушение нормализации обнаруживается так же, как и в предыдущем случае, а правое нарушение -- по комбинациям 00,0... и 11,11...

Похожие статьи




Принципы выполнения арифметических операций над числами в форме с плавающей точкой, Сложение и вычитание чисел в форме с плавающей точкой - Компьютерная арифметика

Предыдущая | Следующая