Додавання та віднімання чисел з плаваючою комою

Додавання та віднімання чисел з плаваючою комою

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;

Помилка у тексті? Виділи її мишкою і натисніть

Залишилисяреферати, курсові, презентації? Поділися з нами - завантаж їх тут!