logo
AK

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. Помилка посилювалася, якщо потім йшла група одиниць.