РефератыМатематикаОпОперации с числами с плавающей запятой

Операции с числами с плавающей запятой

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


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


2. Производится сложение (вычитание) мантисс, в ре­зультате чего получается мантисса суммы (разности).


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


4. Полученная сумма (разность) нормализуется.


Примем, что числа с плавающей запятой имеют основание порядка S = 16.


Первое слагаемое (уменьшаемое) поступает на входной регистр Рг1, второе слагаемое (вычитаемое) — на входной регистр Рг3. Знаки слагаемых хранится в триггерах зна­ков Тг3н1 и Тг3н2. Смещенные порядки слагаемых пере­сылаются в регистры РгС и РгD. Схема СОЛО применяется для сравнения и выравнивания порядков слагаемых. Сум­матор См, его входные регистры РгА и РгВ и выходной ре­гистр РгСм используются при сложении (вычитании) ман­тисс, а также при передаче мантисс в процедурах выравни­вания порядков и нормализации результата.


Операция сложения (вычитания) может быть подразде­лена на следующие этапы: 1) прием операндов, 2) выравни­вание порядков, 3) сложение мантисс и 4) нормализация результата.


Прием операндов описывается следующей микропрограммой:


РгЗ: = ШИВх, РгВ: = 0, Тг3н1: = Рг3[0]


< прием X, установка в 0 входного регистра сумматора для Х и фиксация знака Х в Тг3н1>;


Рг1: = ШИВых, РгА: = 0, Тг3н2: = если
сложение то
Рг1[0] иначе
< прием Y, установка в 0 вход­ного регистра для Y, фиксация знака Y в ТгЗн2 при сложении либо противоположного знака при вычита­нии >;


Выравнивание порядков начинается с их сравнения. Ман­тисса числа с меньшим порядком при выравнивании сдви­гается вправо на число разрядов, равное разности порядков. Поскольку рассматриваемые числа с плавающей запятой имеют S = 16, сдвиг осуществляется шестнадцатеричными разрядами, т. е. каждый сдвиг производится на четыре двоичных разряда.


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


1) (m— число разрядов мантиссы). В ка­честве результата суммирования сразу же может быть взято первое слагаемое, так как при выравнивании порядков все разряды мантиссы второго слагаемого принимают нулевое значение;


2) . В качестве результата суммирования может быть взято второе слагаемое;


3) . Можно приступить к суммированию мантисс;


4) Мантисса второго слагаемого сдвигается на разрядов вправо, затем производится сум­мирование мантисс;


5) Перед выполнением сумми­рования мантисс производится cдвиг на разрядов вправо мантиссы первого слагаемого.


За порядок результата при выполнении суммирования принимается больший из порядков операндов.


Выравнивание порядков осуществляется следующим образом. Смещенный порядок числа Х из РгЗ передается в регистр РгD, РгСОЛО и в счетчик, соединенный с выхо­дом РгСОЛО. Затем в РгС передается смещенный поря­док числа Y:


РгС: = О, PD [0]: = 0, PгD [1 ¸ 7] := Рг3 [1 ¸ 7];


РгСОЛО: = РгС Å PгD;


Сч1: = РгСОЛО;


РгС [О]: = 0, РгС [1 ¸ 7] = Pг [1 ¸ 7];


После этого начинается сравнение порядков чисел Х и Y на СОЛО и сдвиг мантиссы числа с меньшим порядком вправо,


Для того чтобы учесть случаи 1 и 2, возникающие при сравнении порядков, и не делать лишних сдвигов ман­тиссы, превратившейся в процессе выравнивания порядков в 0, на счетчике циклов СчЦ фиксируется предельное число сдвигов, равное количеству шестнадцатеричных цифр ман­тиссы:


СчЦ: = 6;


При выполнении сдвига на один шестнадцатеричный разряд содержимое СчЦ уменьшается на 1. При СчЦ = 0 сдвиги прекращаются и в качестве результата берется большее слагаемое.


Микропрограмма выравнивания порядков:

















МК:


если
РгС > РгD то
МК1 иначе
если
РгС = РгD то
МКЗ иначе
МК2;


MK1:


PгB [8 ¸ 31]: = PгЗ [8 ¸ 31];


РгСм: = П(4) См, РгСм [0 ¸ 3]: = 0, Сч1 := Сч1+1


<сдвиг вправо мантиссы Х и увеличения порядка X, первоначально занесенного в РгСч1, на 1>;


Рг3[8 ¸ 31]:=РгСм[8 ¸ 31]; РгD:=Сч1, СчЦ: = СчЦ - 1


<фиксация сдвинутой мантиссы Х и увеличенного порядка X, уменьшение на 1 числа цифр мантиссы X, не вышедших за разрядную сетку>;


если
СчЦ ¹ 0 то
МК;


РгВ: = 0, РгА: = Рг1, РгСм := См;


ШИВых: = РгСм;


конец


<выдача Y в качестве результата—случай 2 при сравнении порядков>;


МК2:


РгА[8 ¸ 31] :=Рг1 [8 ¸31];


РгСм: = П (4) См, РгСм [0 ¸ 3] : = 0, Сч1 := Сч1-1


<сдвиг вправо мантиссы Y и уменьшение большего порядка X, первоначально занесенного в Сч1, на 1. Уменьшение производится до тех пор, пока порядок Х не сравняется с порядком Y, после чего в качестве порядка результата принимается сохраненный в Рг3 исходный порядок Х>;


Рг1 [1 ¸ 31]: = РгСм [8 ¸ 31], РгD: = Сч1, СчЦ: = СчЦ - 1,


если
СчЦ ¹ 0, то
МК4 иначе
РгА: =0, РгВ: =Рг3, РгСм: =См, ШИВых: = РгСм,


конец


<выдача Х в качестве результата — случай 1 при сравнении порядков>;


МК4:


если
РгС > PгD то
МК2;


PгD[0]: = 0, РгD[1 ¸ 7]: = Рг3[1 ¸ 7], РгС = 0;


РгСОЛО : = РгС Å PгD;


Сч1: = РгСОЛО


<фиксация порядка Х после завершения выравни­вания в качестве порядка результата>;


МКЗ:


РгСм: = 0, Pгl [0 ¸ 7]

: = РгСм, РгЗ [0 ¸ 7] : = РгСм


<обнуление поля порядка слагаемых>;




После выравнивания порядков модули мантисс хра­нятся в Pгl и РгЗ в разрядах с 8-го по 31-й, их знаки в Тг3н2 и Тг3н1, а порядок результата в Сч1.


Сложение мантисс. Анализируются знаки мантисс и при равенстве знаков модули мантисс складываются. Если оказывается, что См [7] = 1, то возникло переполнение при сложении мантисс. В случае переполнения мантисса суммы сдвигается на четыре двоичных разряда (один шестнадцатеричный разряд) вправо, а порядок увеличивается на 1 (Сч1: = Сч1 + 1). Если после этого Сч1 [0] = 1, то формируется признак прерывания из-за переполнения по­рядка. Если переполнения нет, то в РгСм формируется ре­зультат операции, для чего содержимое Сч1 [1 ¸ 7] за­носится в РгСм [1 ¸ 7], в РгСм [0] передается знак, а в РгСм [8 ¸ 31]— мантисса суммы.


При различных знаках мантисс отрицательная мантисса передается на входной регистр сумматора в обратном коде и производится суммирование ее с прямым кодом положи­тельной мантиссы и 1, прибавляемой к младшему разряду сумматора. Знак результата фиксируется в триггере знака. От полученного результата, если он отрицателен, берется его модуль. Если результат нормализован (См [8 ¸ 11] ¹ 0), то на РгСм заносятся знак результата (по значению триггера знака), порядок по значению Сч1 и модуль мантиссы.


Если результат не нормализован и нет исчезновения значимости (мантисса не равна 0), производится нормали­зация. Мантисса результата сдвигается влево и одновре­менно уменьшается порядок результата (Сч1: = Сч1 - 1). При отрицательном переполнении порядка (Сч1 [0] = 1) формируется признак исчезновения порядка. Если нормализация завершается без исчезновения порядка, фор­мируется результат операции из кода знака, порядка и мантиссы.


Микропрограмма процедуры сложения мантисс:



























если
ТгЗн ¹ Тг3н2 то
МЗ;


РгА: = Рг1, РгВ: = РгЗ;


РгСм: = См;


если
См[7] = 1 то
М2;


М1:


РгСм [ 1 ¸ 7]: = Сч1 [1 ¸ 7];


РгСм [0] :== если
Тг3н1=0 то 0 иначе
1;


М:


ШИВых: = РгСм;


конец
;


М2:


Сч1:=Сч1+1, РгСм := П(4)См, РгСм[0 ¸ 3]:=0;


если
Сч1[0]=0 то М1 иначе
прерывание из-за переполнения порядка;


МЗ:


если
Тг3н1=0 то РгА :=, РгВ: = РгЗ иначе


РгА : = Рг1, РгВ: = ;


РгСм :=РгА+РгВ +1;


если
См[0]=0 то M4;


Рг3:= РгСм;


РгА :=0, РгВ: =;


РгСм:= РгА +РгВ +1;


М4:


ТгЗн1 := РгЗ [0];


М5:


если
См [8 ¸ 11] ¹ 0 то
M1;


если
См ¹ 0 то
М6;


РгСм: = 0, прерывание из-за потери значимости;


M6:


Сч1:=Сч-1, РгСм := Л(4)См, РгСм[28¸31]: = 0;


РгЗ: = РгСм;


РгВ : = РгЗ, РгА: = 0;


РгСм: = См;


если
Сч1[0]=0 то
М5;


РгСм: = 0, прерывание из-за исчезновения порядка;




Сложение и вычитание выполняются приближенно, так как при выравнивании по­рядков происходит потеря младших разрядов одного из слагаемых. В этом случае погрешность всегда отрицательна и может доходить до единицы младшего разряда. Чтобы уменьшить погрешность, применяют округление резуль­тата. Для этого может быть использован дополнительный разряд сумматора, в который после выполнения суммиро­вания добавляется 1.





Анализ программы на примерах


Y1
= 0 1001101 110100101110011011100011 = 0 4D D2E6E3


X1
= 1 1001011 110001100101110110100111 = 1 4B C65DA7


Выравнивание порядков
:


МК: РгС>РгD (01001101>01001011) переход на МК1


MК1: сдвигаем мантиссу Х1 вправо на 4 разр. получаем 000011000110010111011010 и увел. порядок Х1 на 1 получаем 01001100 переход на МК


МК: РгС>РгD (01001101>01001100) переход на МК1


МК1: сдвигаем мантиссу Х1 вправо на 4 разр. получаем 000000001100011001011101 и увел. порядок Х1 на 1 получаем 1001101 переход на МК


МК: РгС=РгD (01001101=01001101)


Порядки выравненны.


Сложение мантисс:


ТгЗн1 ¹ ТгЗн2 переход на М3


М3: ТгЗн1 ¹ 0 Þ РгВ = (00110010 111111110011100110100010); РгСм=РгА + РгВ + 1 = 01011011 110100100010000010000110;


См[0] = 0 Þ переход на М1


М1: РгСм [ 1 ¸ 7]: = Сч1 [1 ¸ 7] = 1001101;


РгСм [0] :== если
Тг3н1=0 то 0;


ШИВых: = РгСм = 0 1001101 110100100010000010000110 = 0 4D D22086 ;


КОНЕЦ.


Y2
= 0 1001100 110100101110011011100011 = 0 4С D2E6E3


X2
= 0 1001101 110001100101110110100111 = 0 4D C65DA7


Выравнивание порядков:


РгD > РгС Þ переход на МК2


МК2: сдвигаем мантиссу Y2 вправо на 4 разр. получаем 000011010010111001101110; уменьшаем порядок Х2 на 1 получаем 1001100; РгD = РгС


Порядки выравненны.


Сложение мантисс:


ТгЗн1 = ТгЗн2 Þ См = РгА + ргВ = 00000000 110100111000110000010101; переход на М1


М1: РгСм [ 1 ¸ 7]: = Сч1 [1 ¸ 7] = 1001110;


РгСм [0] :== если
Тг3н1=0 то 0;


ШИВых: = РгСм = 0 1001101 110100111000110000010101 = 0 4D D38C15;


КОНЕЦ.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Операции с числами с плавающей запятой

Слов:1675
Символов:12852
Размер:25.10 Кб.