Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ацац.docx
Скачиваний:
75
Добавлен:
12.02.2016
Размер:
58.06 Кб
Скачать

1.2. Додавання (віднімання) двійкових чисел з рухомою комою

Додавання і віднімання чисел з рухомою комою виконується у декілька етапів.

  1. Вирівнювання порядків;

Як відомо, реальна величина (вага) Ni одиниці і-го розряду мантиси визначається не тільки позицією даного розряду, але й порядком р числа, тобто Ni = dp-I, де і – номер позиції, рахуючи вправо від коми.

При додаванні (відніманні) необхідно, щоб ваги однойменних розрядів мантис чисел були однаковими. Для цього мантиси зсувають одна щодо одної так, щоб їх порядки вирівнялися. Щоб при вирівнюванні порядків не отримати мантиси більшої за одиницю, їх потрібно вирівнювати від меншого до більшого порядку. Мантиса з меншим порядком зсувається вправо (у бік молодших розрядів) на кількість розрядів, що дорівнює різниці порядків і одночасно коректується порядок (збільшується до значення спільного порядку).

  1. Додавання мантис;

Додавання мантис з вирівненими порядками виконується згідно правил додавання чисел з фіксованою комою. При алгебраїчному додаванні для представлення від’ємних мантис використовується доповнювальний або обернений модифікований код.

Сума мантис – це мантиса результату. Порядок результату – вирівняний порядок доданків, тобто порядок більшого числа.

Отриманий від'ємний результат додавання необхідно перевести у прямий код.

  1. Нормалізація результату.

Виконується тоді, коли у отриманому результаті відбувається порушення нормалізації вправо або переповнення розрядної сітки.

У результаті додавання мантис може виникнути один з трьох випадків:

Випадок 1.

Додавання не викликає переповнення розрядної сітки і порушення нормалізації вправо. Ознакою цього є відсутність нулів праворуч від коми і однойменність значень в обох розрядах знаку у отриманому результаті. Наприклад, результат дорівнює 00,101101... Алгоритм виконання операції додавання має чотири етапи:

а) Вирівнювання порядків;

б) Переведення мантис у модифікований доповняльний (або обернений) код;

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

г) Якщо знак суми мантис від’ємний, переведення результату у прямий код, тобто виконується друге доповнення (обернення) мантиси.

Приклад 1: Додати A = - 0,1101 * 10101 i B = + 0,1100 * 10011.

а) Вирівнюємо порядки.. Спочатку, визначаємо арифметичну різницю між порядками, віднімаючи від значення порядку числа А значення порядку числа В. При цьому операцію віднімання замінюємо операцією додавання у доповнювальних модифікованих кодах.

рАрВ = рА + (– рВ) = (pA доп(м) = 00,101) + (pB доп(м) = 11,101) = 00,010 – різниця порядків

Аналіз отриманої різниці:

  • знак різниці показує, що порядок числа А більше порядку числа В;

  • порядки відрізняються на дві одиниці.

Через те, що рА > pB на дві одиниці, зсуваємо мантису числа В вправо на два розряди, тобто МВ пр= 00,0011 і Впр= 00,0011 * 10101. Розряди мантиси числа В, які вийшли за межі розрядної сітки процесора, будуть втрачені, що погіршить точність обчислень.

б) Переводимо мантиси обох чисел у модифікований доповняльний код:

МА доп(М) = 11,0011; МВ доп(М) = 00,0011

в) Додаємо модифіковані доповняльні коди мантис чисел А та В і отримуємо результат у модифікованому доповняльному коді:

(А + В)доп (М) = 11,0011 + 00,0011 = 11,0110

г) Аналіз результату додавання мантис починається із знакових розрядів. Знакові розряди показують, що переповнення розрядної сітки у нас не виникло. Результат – від'ємний, тому переводимо мантису результату у прямий код і дописуємо спільний порядок:

(А + В)пр (М) = 11,1010 * 10101 - остаточний результат.

При переведенні у прямий код знак результату не міняється.

Подальший аналіз показує, що порушення нормалізації результату вправо немає.

Випадок 2.

Додавання двох нормалізованих чисел дає ненормалізований результат. Таке явище називають порушенням нормалізації вправо. Його ознака – поява у мантисі суми одного або більше, таких що йдуть підряд, нулів праворуч від коми (0,01;...,; 0,0001). Відповідно, для корекції такого результату, виконується нормалізація його мантиси вліво на таку кількість розрядів, щоб старша цифра мантиси не дорівнювала нулю. Порядок суми зменшується на величину, яка дорівнює числу зсувів мантиси при нормалізації. У алгоритмі виконання операції додавання з’являється додатковий етап – нормалізація.

Приклад 2: Додати два числа: А = + 0,10100 * 10101 та В = - 0,10110 * 10100 .

а) Для вирівнювання порядків доданків необхідно із порядку числа А відняти порядок числа В. Віднімання замінимо додаванням у модифікованому доповняльному коді.

(рА доп(М)= 00,101) + (рВ доп(М) = 11,100) = 00,001

Хід виконання:

00,101 – 00,100 = 00,101 + (- 00,100) = 00,101 + (11,011 + 001) = 00,101 + 1,100 = 00,001

Через те, що рА > pB на +1, виконуємо зсув мантиси числа В вправо на 1 розряд.

МВ пр = -0,01011.

б) Переведемо мантиси доданків у модифікований доповняльний код.

МА пр = +0,10100  МА доп(М) = 00,10100.

МВ пр = -0,01011  МВ доп(М) = 11,10101.

в) Додаємо мантиси чисел А і В у модифікованих доповняльних кодах:

(МА доп(М) = 00,10100) + (МВ доп(М) = 11,10101) = 00,01001

Як видно, виникло порушення нормалізіції вправо.

г) Переводимо результат у прямий код (виконуємо друге доповнення). У нашому випадку прямий код суми мантис збігається з доповняльним кодом суми мантис, тому що результат є число додатне.

МА пр + МВ пр = 00,01001

д) Виконуємо нормалізацію результату, тобто зсув мантиси ліворуч з одночасним відповідним зменшенням порядку:

(А + В)пр = 0,1001 * 10100 – остаточний результат.

Випадок 3.

Додавання веде до переповнення розрядної сітки. Признаком цього слугує поява різних цифр у знакових розрядах (01 або 10). Таке явище називається порушенням нормалізації вліво.

У алгоритмі виконання отриманий результат додавання мантис у модифікованому доповняльному коді спочатку нормалізується праворуч, а потім переводиться у прямий код.

Наприклад, після додавання мантис отримуємо число 01,00001. Нормалізуємо його зсувом вправо на один розряд і одночасно збільшуємо порядок на 1. В результаті отримуємо:

(А + В)доп = 00,100001 * 10к+1

Переводимо у прямий код: (А + В)пр = + 0,100001 * 10к+1.

Внаслідок корекції результату шляхом зсуву вліво точність його погіршилася.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]