Арифметические операции над числами с плавающей запятой

Операции сложения и вычитания

Рассмотрим основные нюансы операции сложения на примере для десятичных чисел.

А = 0, 945 · 103

мантисса МА РА

В = 0, 847 · 102

МВ РВ

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

В' = 0, 0847 · 103 = РА

МВ РВ

 
 

 

МА = 0,945

М'В = 0,0847

МСАВ = 1,0297

В результате сложения получается ненормализованный результат (сумма мантисс больше 1, при сложении мантисс происходит переполнение формата). Для приведения результата к нормализованному виду необходимо сдвинуть его мантиссу вправо и увеличить порядок на 1. Таки образом результат сложения С = 0,10297 · 104.

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

1) сравнение порядков;

2) выравнивание (уравнивание) порядков;

3) сложение мантисс;

4) нормализация результата.

Обязательными из этих этапов являются 1-й и 3-й, а 2-й и 4-й этапы могут быть опущены.

Этап 1

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

Этап 2

Этот этап пропускается, если на предыдущем этапе получена нулевая разность характеристик (порядки операндов одинаковы). Выравнивание порядков реализуется путем сдвига мантиссы операнда с меньшим порядком вправо на число разрядов, равное модулю разности порядков. В общем плане понятие разряда зависит от основания порядка. Если в качестве основания используется S=2 (формат СМ ЭВМ и стандарт IEEE-754), то разряд является двоичным. Если основание порядка S=16 (формат ЕС ЭВМ), то разряд является шестнадцатиричным.

Например, если модуль разности порядков равен 2, то сдвиг мантиссы вправо в формате ЕС ЭВМ производится на 8 двоичных разрядов. Выбор мантиссы сдвигаемого операнда определяется знаком разности характеристик, полученным на первом этапе. При отрицательной разности сдвигается мантисса первого операнда (МА), при положительной разности – мантисса второго операнда (МВ).

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

При большом значении модуля разности порядков мантисса операнда с меньшим порядком может при сдвиге вправо полностью выйти за пределы формата (обратиться в 0). В этом случае операция сложения может досрочно завершаться путем присвоения результату значения операнда с большим порядком.

Этап 3

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

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

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

1) в качестве уменьшаемого используется мантисса положительного операнда;

2) в качестве уменьшаемого используется мантисса первого операнда;

3) в качестве уменьшаемого используется мантисса операнда с меньшим порядком.

Кроме того, различные варианты выполнения сложения (вычитания) мантисс с разными знаками могут иметь место в связи с использованием явного или неявного представления знаков операндов. Принцип реализации сложения мантисс с разными знаками определяет и принцип получения знака результата. Независимо от используемого принципа, отрицательный результат сложения или вычитания мантисс, получаемый в дополнительном коде, переводится в прямой код.

Замечание. При сложении мантисс чисел с разными знаками мантисса результата может содержать старшие нули, т.е. результат может оказаться ненормализованным.

Этап 4

Этот этап имеет место, если при сложении мантисс получается ненормализованный (денормализованный) результат. Будем различать два вида денормализации:

• денормализация влево;

• денормализация вправо.

• Первый случай денормализации может иметь место только при одинаковых знаках операндов. Этот случай распознается по наличию переполнения при сложении мантисс. Нормализация такого результата осуществляется сдвигом мантиссы вправо и увеличением порядка (характеристики) на 1. При сдвиге мантиссы в старший разряд вносится 1. Для формата ЕС ЭВМ старшая двоичная тетрада мантиссы после сдвига принимает значение 0001. Если порядок большего операнда, используемый в качестве порядка результата, имеет максимальное значение, то его увеличение на 1 приводит к особому случаю переполнения порядка.

• Денормализация вправо означает наличие старших нулей в мантиссе результата. Для формата ЕС ЭВМ денормализованный вправо результат должен содержать в старших разрядах мантиссы как минимум четыре нуля. Нормализация такого результата осуществляется сдвигом мантиссы влево до удаления всех старших нулей и соответствующим умножением порядка. Порядок (характеристика) уменьшается на значение числа разрядов (двоичных или шестнадцатиричных), на которые производится сдвиг влево мантиссы. При уменьшении порядка может иметь место особый случай исчезновения порядка (в терминологии фирмы Intel эта ситуация называется антипереполнением). Исключением из общих правил нормализации является получение нулевой мантиссы результата при сложении операндов с разными знаками. В этом случае результат не нормализуется и представляется кодом полного нуля (во всех разрядах числа – 0).

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: