Додавання та віднімання чисел з плаваючою комою
Додавання та віднімання чисел з плаваючою комою
1. Здійснюється вирівнювання порядків чисел. Порядок меншим (за модулем) числа приймається рівним порядку більшого числа, а мантиса меншого числа зрушується вправо на число S-ічних розрядів, що дорівнює різниці порядків чисел.
2. Проводиться складання (віднімання) мантис, у результаті виходить мантиса суми (різниці).
3. Порядок результату приймається рівним порядку більшого числа.
4. Отримана сума (різниця) нормалізується.
Приймемо, що числа з плаваючою комою мають основу порядку S = 16.
Перше доданок (зменшується) надходить на вхідний регістр Рг1, другий доданок (віднімається) - на вхідний регістр Рг3. Знаки доданків зберігається у тригерах знаків Тг3н1 та Тг3н2. Зміщені порядки доданків пересилаються до регістрів РгС і РгD. Схема СОЛО застосовується для порівняння та вирівнювання порядків доданків. Суматор См, його вхідні регістри РгА і РгВ та вихідний регістр РгСм використовуються при складанні (відніманні) мантис, а також при передачі мантис у процедурах вирівнювання порядків та нормалізації результату.
Операція складання (віднімання) може бути поділена на такі етапи: 1) прийом операндів, 2) вирівнювання порядків, 3) додавання мантис і 4) нормалізація результату.
Прийом операндів описується наступною мікропрограмою:
РгЗ: = ШІВх, РгВ: = 0, Тг3н1: = Рг3 [0]
Рг1: = ШИВих, РгА: = 0, Тг3н2: = якщо додавання то Рг1 [0] інакше;
Вирівнювання порядків починається з їхнього порівняння. Мантіса числа з меншим порядком при вирівнюванні зсувається праворуч на число розрядів, що дорівнює різниці порядків. Оскільки розглянуті числа з плаваючою комою мають S = 16, зсув здійснюється шістнадцятковими розрядами, тобто кожен зсувпроводиться на чотири двійкових розряди.
При порівнянні порядків можливі п'ять випадків:
1) (m-число розрядів мантиси). Як результат підсумовування відразу ж може бути взято перший доданок, так як при вирівнюванні порядків всі розряди мантиси другого доданку набувають нульового значення;
2). Як результат підсумовування може бути взято другий доданок;
3). Можна приступити до підсумовування мантис;
4) Мантіса другого доданку зрушується на розрядів вправо, потім проводиться підсумовування мантис;
5) Перед виконанням підсумовування мантис проводиться зсув на розрядів праворуч мантиси першого доданку.
За порядок результату під час підсумовування приймається найбільший із порядків операндов.
Вирівнювання порядків здійснюється в такий спосіб. Зміщений порядок числа Х з РгЗ передається в регістр РгD, РгСОЛО та лічильник, з'єднаний з виходом РгСОЛО. Потім РгС передається зміщений порядок числа Y:
РгС: = О, PD [0]: = 0, PгD [1 7] := Рг3 [1 7];
РгСОЛО: = РгС Å PгD;
РгС [О]: = 0, РгС [1 7] = Pг [1 7];
Після цього починається порівняння порядків чисел Х і Y на СОЛО і зсув мантиси числа з меншим порядком праворуч,
Для того, щоб врахувати випадки 1 і 2, що виникають при порівнянні порядків, і не робити зайвих зрушень мантиси, що перетворилася в процесі вирівнювання порядків в 0, на лічильнику циклів СчЦ фіксується гранична кількість зрушень, що дорівнює кількості шістнадцяткових цифр мантиси:
При виконанні зсуву на один шістнадцятковий розряд вміст СчЦ зменшується на 1. При СчЦ = 0 зрушення припиняються і як результат береться більший доданок.
Мікропрограма вирівнювання порядків:
якщо РгС > РгD тоМК1 інакше якщо РгС = РгD то МКЗ інакше МК2;
PгB [8 31]: = PгЗ [8 31];
РгСм: = П(4) См, РгСм [0 3]: = 0, Сч1 := Сч1+1
Рг3 [8 31]: = РгСм [8 31]; РгD: = Сч1, СчЦ: = СчЦ - 1
якщо СчЦ ¹ 0, то МК;
РгВ: = 0, РгА: = Рг1, РгСм: = См;
РгА [8 31]: = Рг1 [8 31];
РгСм: = П (4) См, РгСм [0 3] : = 0, Сч1 := Сч1-1
Рг1 [1 31]: = РгСм [8 31], РгD: = Сч1, СчЦ: = СчЦ - 1,
якщо СчЦ ¹ 0, то МК4 інакше РгА: =0, РгВ: =Рг3, РгСм: =См, ШИВих: = РгСм,
якщо РгС > PгD то МК2;
PгD[0]: = 0, РгD[1 7]: = Рг3[1 7], РгС = 0;
РгСОЛО: = РгС Å PгD;
РгСм: = 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 7]: = Сч1 [1 7];
РгСм [0] :== якщо Тг3н1=0 то 0 інакше 1;
кінець;
Сч1:=Сч1+1, РгСм := П(4)См, РгСм[0 3]:=0;
якщо Сч1[0]=0 то М1 інакше переривання через переповнення порядку;
якщо Тг3н1=0 то РгА :=, РгВ: = РгЗ інакше
РгА: = Рг1, РгВ: =;
якщо См [0] = 0 то M4;
РгА: = 0, РгВ: =;
РгСм: = РгА + РгВ +1;
ТгЗн1: = РгЗ [0];
якщо См [8 11] ¹ 0 то M1;
якщо Див ¹ 0 то М6;
РгСм: = 0, переривання через втрату значущості;
Сч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;
Помилка у тексті? Виділи її мишкою і натисніть
Залишилисяреферати, курсові, презентації? Поділися з нами - завантаж їх тут!