Сложение и вычитание чисел с плавающей запятой.

Переполнение при вычитании и способы его фиксации.

 

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

Пример: n=6

зн. беззн.

A= -13 1.10011 -13 51

B= 24 0.11000 24 24

----------

C= 0.11011 27(-37) 27(27)

 

A= 24 0.10011 24 24

B= -13 1.10011 -13 51

-----------

C= 1.00101 -27? 37?

 

По аналогии со знаковым сложением фиксация переполнения при вычитании может реализоваться двумя способами:

1) Анализ знаков операндов и результата. Если знаки операндов разные и знак результата отличен от знака первого операнда то фиксируется переполнение.

2) Сравнение заемов в два старших разряда. Если один и только один из заемов имеет место то фиксируется переполнение. При наличии обоих заемов или их отсутствии результат вычитания является корректным.

В процессорах INTEL реализован второй способ в соответствии с которым осуществляется установка флага OF.

 

 

Пример:

А=0,527*103 Pa=3

B=0,923*102 Pb=2 B=0,0923*103

C=Ma+Mb=0.6193*103

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

1) Сравнение порядков.

2) Выравнивание порядков.

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

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

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

1) Сравнение порядков реализуется по средством вычитания. При этом в целях однозначности принято из Ра вычитать Рb при использовании смещенных порядков осуществляется вычитание характеристики как беззнаковых целых чисел. Естественно что разность характеристик имеет тоже значение что и разность порядков если при вычитании характеристик имеет место заем в старший разряд то результат вычитания отрицательный и представлен в дополнительном беззнаковом коде. Для второго этапа необходимо его преобразование в прямой код.

2) Этот этап опускается при равенстве порядков операндов то есть если: Xa-Xb=0

При выполнении этого этапа всегда операнд с меньшим порядком приводится к большему порядку. Это реализуется сдвигом мантиссы вправо на количество разрядов равное |Xa-Xb| .В данной трактовке понятие разряда зависит от основания порядка. Для ЕС ЭВМ при |Xa-Xb|=2 мантисса сдвигается на 2-а шестнадцатеричных разряда то есть на 8 двоичных. При сдвиге мантиссы операнда с меньшим порядком происходит потеря ее младших разрядов ,что приводит к уменьшению точности в общем случае.

При использовании в мантиссе скрытого старшего разряда при выполнении операций над мантиссой он должен быть восстановлен.

При большом модуле разности порядков может оказаться что мантисса с меньшим порядком полностью выйдет за пределы формата. Этот факт можно учесть для ускорения выполнения операций следующим образом на первом этапе |Xa-Xb| сравнивается с числом разрядов мантиссы и если он оказывается больше то операция завершается путем присвоения результату значения операнда с большим порядком.

3) При сложении мантисс на этом этапе необходимо учитывать что мантиссы операндов независимо от их знаков представлены в прямом коде в котором и реализуется их сложение. Для операндов с одинаковыми знаками осуществляется сложение мантисс в прямом коде с присвоением результату знака первого операнда.

Единственный момент возникающий при сложении мантисс в прямых кодах это возможность переполнения. Переполнение если оно имеет место устраняется на четвертом этапе. Для операндов с разными знаками сложение мантисс заменяют их вычитанием в принципе вместо прямого вычитания можно выполнить их сложение с представлением одной мантиссы в дополнительном коде. Факт выбора мантисс уменьшаемого и вычитаемого при прямом их вычитании или выбора мантиссы представляемой в дополнительном коде при их сложении определяется типом ЭВМ и в рамках одного типа зависит от модели. В принципе могут использоваться следующие подходы: a) Уменьшаемым является мантисса положительного операнда. б) Уменьшаемым является мантисса первого операнда. в) Уменьшаемым является мантисса операнда с большим порядком ,а при равенстве порядков мантисса первого операнда.

Как вычитание так и сложение мантисс как правило реализуется в беззнаковом варианте о знаке суммы следует судить по переносу ,а о знаке разности по заему .

Для каждого из трех способов сложения мантисс с разными знаками используется свой способ формирования знака результата(продумать какой).

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

4) Нормализация

Этот этап имеет место только при получении не нормализованного результата.

На предыдущем этапе может быть получен один из двух видов не нормализованного результата.

а) Результат денормализованый влево получается получается при сложении положительных или отрицательных операндов в случае переполнения.

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

Если порядок результата равный порядку большего операнда был максимальным то увеличение на единицу даст особый случай "переполнение порядка".

б) Результат денормализованый вправо получается при сложении операндов с разными знаками при наличии в мантиссе результата старших нулей.

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