Деление чисел в машинах с плавающей запятой.

ДЕЛЕНИЕ ЧИСЕЛ В ДОПОЛНИТЕЛЬНОМ КОДЕ.

Различают схемы деления с восстановлением остатка и без восстановления остатка. Операцию деления выполняют с помощью операций сдвига и сложения на сумматорах дополнительного кода.

Операцию деления без восстановления остатка выполняют по следующей схеме:

1. Уравнивают разрядную сетку делимого и делителя.

2 Если делимое А>0, то А =А-В. Если полученная разность А>0, то увеличить на единицу значение целой части частного C и перейти к пункту 3, иначе закончить формирование целой части частного и перейти к пункту 4.

3 Пункт 2 повторить до тех пор, пока полученная разность A не станет меньше 0.

4 Выполнить линейный сдвиг А на один разряд влево.

5 Если A>0, то найти А=А-B, иначе А=А+В.

6 Если A>0, то i – му разряду дробной части присвоить 1, иначе 0.

7 Если число знаков после запятой меньше необходимого, то вернуться к пункту 4.

 

Пример: А=10, В=3 [А]дк= 00 1010 [В]дк=00 0011 [-В]дк=11 1101

00 1010

11 1101

000111 >0 inc ( c )

 

00 0111

11 1101

00 0100 >0 inc ( c )

 

00 1000

11 1101

00 0001 >0 inc (c )

 

00 0001

11 1101

11 1110 <0 “,”

 

сдвиг 11 1100 11 1100

00 0011

11 1111 <0 011,0

сдвиг 11 1110 11 1110

00 0011

00 0001 >0 011,01

сдвиг 00 0010 00 0010

11 1101

11 1111 <0 011,010 ….

 

Операцию деления c восстановлением остатка выполняют по следующей схеме:

 

1. Уравнивают разрядную сетку делимого и делителя.

2. Если делимое А>0, то А =А-В. Если полученная разность А>0, то увеличить на единицу значение целой части частного C и перейти к пункту 3, иначе закончить формирование целой части частного и перейти к пункту 4.

3. Пункт 1 повторить до тех пор, пока полученная разность A не станет меньше 0.

4. Выполнить восстановление остатка А=А+В.

5. Выполнить линейный сдвиг А на одну позицию влево.

6. Найти А=А-В.

7. Если А<0, то то i – му разряду дробной части присвоить 0 и выполнить восстановление А=А+В, иначе i – му разряду дробной части присвоить 1.

8. Если число знаков после запятой меньше необходимого, то вернуться к пункту 5.

 

Пример А=12 В=5 [А]дк= 00 1100 [В]дк=00 0101 [-В]дк=11 1011

00 1100

11 1011

00 0111 >0 inc( c) 001

 

00 0111

11 1011 >0 inc( c) 010

00 0010

 

00 0010

11 1011

11 1101 <0 010,

восстановление 11 1101+ 00 0101= 00 0010

сдвиг 00 0100

00 0100+ 11 1011= 11 1111 <0 010 ,0

сдвиг 11 1110

восстановление 11 1111+ 00 0101= 00 0011

сдвиг 00 0110

00 0110+11 1011= 00 0001 >0 010,01…

 

 

Деление чисел в машинах с плавающей запятой.

Деление двоичных чисел, представленных в форме с плавающей запятой.

 

При операции деления чисел, представленных в форме с плавающей запятой их мантиссы делятся, как числа с фиксированной запятой, а порядки вычитываются. В обоих случаях проверка на переполнение обязательна. Но, т.к. реально вычитываются характеристики чисел, то деление выполняется по следующей формуле:

 

A1 : A2 = m12 : m22 = (m1 : m2)2 .

 

Знак ответа определяется обычным образом. Если ответ получился ненормализованный, то выполняется процедура нормализации и округления ответа.

Т.к. мантиссы операндов нормализованы, то возможны случаи, когда

|mA| |mB|; |mA| < |mB|. В первом случае перед началом деления надо вычесть делитель из делимого и в целую часть мантиссы частного записать 1. Затем продолжать делить числа обычным методом. После получения частного очевидно, что оно не будет нормализованным. Значит надо нормализовать частное, т.е. в данном случае сдвинуть его на 1 разряд вправо, а к порядку частного добавить 1.

Напомним, что при реализации алгоритмов математических операций в формате с плавающей запятой каждый раз, когда осуществляется та или иная процедура, затрагивающая характеристики операндов или результата, производится контроль над переполнением и исчезновением порядка, т.е. контролируется условие

0 r rmax ,

 

где rmax = l + pmax .

Рассмотрим пример:

A = 10 = 0,1010, pA = 4, B = 2 = 0,1, pB = 2. p = pA - pB = 2. mA = 0.1010,

mB = 0.1 , (mB)l = 1.1000. |mA| > |mB|. При первом вычитании mB из mA 1 записываем в целую часть частного:

0.1010

+ 1.1000

а0 0.0010 С = 1,XX, далее, будем делить методом деления без восстановления остатка.

2а0 0.0100

+ 1.1000

а1 1.1100 а1<0 С = 1,0

2a1 1.1000

+ 0.1000

0.0000 a2 = 0 С = 1,01, сдвигаем вправо С = 0,101, p = p + 1 = 3.

 

В завершение обзора принципов организации арифметических действий с двоичными числами нужно отметить, что в Главе 11 подробно рассмотрены все алгоритмы арифметических процедур с числами в формах с фиксированной и плавающей запятой.

 

1. Записываем делимое А и делитель В в форме с плавающей точкой. Выравниваем мантиссы путем дописывания незначущих нулей справа.

2. Определяем знак частного путем сложения по модулю 2 знаковых цифр операндов.

3. Определяем порядок частного путем вычитания порядка делителя из порядка делимого

4. Если мантисса делимого больше мантиссы делителя, то вычитаем из мантиссы делимого мантиссу делителя в целую часть мантиссы частного записать 1, иначе записываем 0. Затем делим модули мантисс модули мантисс операндов по правилам деления чисел с фиксированной точкой.

5. Выполняем нормализацию мантиссы частного и ее округление.

6. Присваиваем знак мантиссе результата.

 


<== предыдущая лекция | следующая лекция ==>
УМНОЖЕНИЕ ЦЕЛЫХ ЧИСЕЛ В ЭВМ. | КЛАССИФИКАЦИЯ КОМПЬЮТЕРОВ




Дата добавления: 2016-10-17; просмотров: 3555;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.011 сек.