Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AK.doc
Скачиваний:
28
Добавлен:
17.03.2016
Размер:
3.6 Mб
Скачать

1.8.2. Особливості ділення чисел у формі з плаваючою крапкою

 

Z = X / Y = q kx m x / q ky m y = q kx-ky m x / m y m x  1, m y <1

Необхідно виконати наступні дії:

1. Знайти порядок частки: k x - k y.

2. Розділити мантиси одним з розглянутих вище способів (обмежень на мантиси не існує).

3. Якщо при діленні мантис частка виявилася денормалізованою вліво на 1 розряд, його зрушують вправо, а до різниці (k x - k y) додають 1.

Реалізація методів прискореного ділення

Треба діяти наступним чином: нехай дільник має в старшому розряді 1, якщо в результаті виконання ділення вийшов залишок, який в k старших розрядах має нулі, то стільки ж нулів повинно бути в k розрядах частки. Можна виконувати лише зсув на k розрядів вліво і частки, і залишку. Якщо в k старших розрядах залишку одиниці, то в (k -1) відповідних розрядах частки теж будуть одиниці. При цьому можна складання не виконувати, а здійснити зсув залишку та частки (k -1) раз, записуючи стільки ж одиниць в старший розряд частки, який потім буде зсуватися.

Можна переходити до четвіркової та інших систем.

При розподілі з плаваючою крапкою в Pentium 1-го покоління при деяких значеннях виникала втрата точності в 12 розряді після крапки, або в 4-му десятковому розряді.

Якщо в 486МП використовувався класичний алгоритм ділення, то в Pentium - ділення в 4-рковій системі (SRT):

1. Знаходимо найбільш значущі цифри діленого і дільника

2. Використовуємо отриману інформацію в якості покажчика в спеціальній таблиці пошуку чергової цифри частки, яка може приймати такі значення: -2, -1,0,1,2.

3. Множимо дільник на знайдену оцінку і віднімаємо отриманий результат з діленого (залишку). Якщо оцінка менше нуля, виконуємо складання.

4. Записуємо знайдену цифру частки в 2 молодших розряду частки

5. Зсуваємо вліво на 2 розряди залишок і частку

6. Вибираємо найбільш значущі цифри зсунутого залишку

7. Повторюємо з кроку 2

8. Якщо останній частковий залишок менше нуля, то скоректувати приватне, віднімаючи 1.

Особливо сильно втрачається точність, якщо найбільш значущі розряди дільника: 1.0001,1.0011,1.0111,1.1010,1.1101. Помилка посилювалася, якщо потім йшла група одиниць.

1.9. Добування квадратного кореня

Частота появи в програмах - 1-1,5%. Зазвичай реалізується програмним шляхом, але іноді і апаратним.

Y n +1 = 1/2 (Y n + X / Y n)       Y n +1   - Y n   

X = 2 Y 0 = 1 Y 1 = 1.5 Y 2 = ...

Вище розглянутий алгоритм переробимо так, щоб добування квадратного кореня можна було виконувати подібно поділу з тією відмінністю, що "дільник" - змінне число.

Нехай Y i-1 = 0.Y -1 Y -2 ... Y - (i-1). М и знайшли (i -1) наближення.

Знайдемо q i = X - (Y i -1 + 2 - i) 2 = q i -1 - 2 - (i -1) [Y i -1 + 2 - (i +1)]

q 0 = X q 1 = q 0 - 2 0 0.01

Для отримання залишку q i треба з попереднього залишку відняти зрушені на (i -1) розряд вправо знайдене наближення до кореня, в якому в двох молодших розрядах додано комбінацію (01). Якщо q i > 0, i цифра чергового наближення повинна бути обрана рівній одиниці. Якщо q i <0, то чергова цифра дорівнює нулю. У разі q i <0 треба відновити попередній додатній залишок аналогічно алгоритму розподілу з відновленням залишків.

Як q 0 беремо підкорінний вираз Х, з якого має бути вирахувано 0.01. Якщо скористатися алгоритмом розподілу без відновлення залишків з використанням ДК, то можна і при реалізації добування кореня уникнути процедури відновлення залишків.

Якщо при цьому вийде від’ємний залишок, то ми додамо до нього число, в якому в двох молодших розрядах записано 11. Наведене вище прищепило нагадує процес ділення по 2 варіанту. Можна організувати процес і по 1 варіанту. При цьому замість зсуву дільника вправо будемо зсувати залишки вліво.

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