Сложения и вычитания чисел с плавающей запятой Сложения и вычитания чисел с плавающей запятой
Сложения и вычитания чисел с плавающей запятой РЕФЕРАТЫ РЕКОМЕНДУЕМ  
 
Тема
 • Главная
 • Авиация
 • Астрономия
 • Безопасность жизнедеятельности
 • Биографии
 • Бухгалтерия и аудит
 • География
 • Геология
 • Животные
 • Иностранный язык
 • Искусство
 • История
 • Кулинария
 • Культурология
 • Лингвистика
 • Литература
 • Логистика
 • Математика
 • Машиностроение
 • Медицина
 • Менеджмент
 • Металлургия
 • Музыка
 • Педагогика
 • Политология
 • Право
 • Программирование
 • Психология
 • Реклама
 • Социология
 • Страноведение
 • Транспорт
 • Физика
 • Философия
 • Химия
 • Ценные бумаги
 • Экономика
 • Естествознание




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


Сложения и
вычитания чисел с плавающей запятой
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;
КОНЕЦ.
8-ми разрядный счётчик на триггерах типа D серии К155
(К155ТМ5 – 4 D-триггера)

      ©2010