V.3 Операция деление на числа с плаваща запетая
Отново
ще
предупредим
читателя, че
към представените
числени
примери в
този, така и във
всички
следващите
раздели
следва да подхожда
след добра
подготовка и
детайлно
запознаване
с теоретичните
постановки и
свързаните с
това алгоритми,
които са
изложени
подробно в книга [1].
ПРИМЕР
165. Да се
изпълни
операция
деление Z=X/Y на
числата X=0,1101.2+4 и
Y=-0,1011.2+2,
които
са
представени
в разрядна
мрежа с обща
дължина n=12[b]=m+k,
където
k=4[b] е
дължината на
полето за
представяне
на характеристиката,
а m=8[b] е
дължината на
полето за
представяне
на мантисата.
Числата
са
представени
в разрядната
мрежа от
следните
комбинации:
X Þ 0 1100 1101000 ;
Y Þ 1
1010 1011000 .
Характеристиките
на числата се
изваждат по
следния
начин:

При
това
изваждане
няма
препълване и
тригерът на
препълването
остава в
състояние нула
(ТП=0). Така
получената
на изхода на
суматора
сума се
коригира
автоматично
при
записването
си в брояча
на характеристиките
(виж
фигура 3.28 на [1]).
Броячът
приема
стойността
(Бр)=01010, където в
неговия
най-старши
разряд се
записва нула,
а в
по-младшия
стойността:
![]()
След
първоначалното
събиране и
коригиране
на
характеристиките
следва
делението на
двете
мантиси,
които
припомняме,
са числа с
ляво
фиксирана
запетая. То е
извършено по
метода без
възстановяване
на остатъците,
по схемата с
неподвижен
делител по
модул:

Полученото
частно
![]()
е
число
по-голямо от
единица. Това
число следва
да се
нормализира
като се
измести на един
разряд
надясно.
Отново
обръщаме
внимание на
загубата на
младша
значеща
цифра, което
е неизбежно и
представлява
принципна
грешка. За
стойността
на мантисата
остава
числото
![]()
Извършената
нормализация
на мантисата
на частното
чрез
изместване
надясно води
до корекция
на
характеристиката,
която се увеличава
с единица.
Корекцията се
извършва в
брояча на
характеристиката,
като
съдържанието
му приема
стойността
(Бр) = 01010+1 = 01011 .
Така
окончателно
от знак,
характеристика
и мантиса в
разрядната
мрежа се
сглобява резултатът:

Това
съдържание
представя
числото:
Z = -0,1001011.2(11-8) =
-100,1011 = -4,6875
.
Този
резултат се
различава от
по-точния, който
е -4,72(72)…. Това се
дължи на
неточното
деление и на
загубата на
значеща
цифра при
нормализацията
на мантисата
на частното.
Заедно с тази
цифра
частното би
било
числото 100,10111 = -4,71875 , което, както
се вижда, е
по-близо да
истината.
ПРИМЕР 166. Да се
изпълни
операция
деление Z=X/Y на
числата X=0,1101.2-4 и
Y=-0,1011.2+5, които
са
представени
в разрядна мрежа
с обща
дължина n=12[b]=m+k,
където k=4[b] е
дължината на
полето за
представяне
на
характеристиката,
а m=8[b] е
дължината на
полето за
представяне
на мантисата.
Числата
са
представени
в разрядната
мрежа от
следните
комбинации:
X Þ 0 0100 1101000 ; Y Þ 1 1101 1011000
Характеристиките
на числата се
изваждат по
следния
начин:

В
случай като
този, когато
при
изваждане на характеристиката
на делителя
от тази на делимото
настъпи
отрицателно
препълване, същото
следва да се
регистрира в
тригера на
препълването
(ТП:=1). Тогава
броячът на
характеристиката
приема и
цифрата в k-тия
разряд. Чрез
тази цифра ще
се установи дали
това
препълване е
премахнато
след нормализацията
на мантисата
на частното.
Ако този бит
не промени
стойността
си и остане в
единица, това
означава, че
е настъпило “антипрепълване”
и за резултат
ще трябва да
се приеме
числото “машинна
нула”.
След
разделяне на
мантисите,
както е показано
в преидущия
пример, се
вижда, че
полученото
частно
![]()
е число
по-голямо от
единица. Това
число следва
да се
нормализира
като се
измести на
един разряд
надясно. При
това то губи
младшия си
бит и приема
стойността
Извършената
нормализация
на мантисата
на частното
води до
корекция на
характеристиката,
която се
увеличава с
единица, като
съдържанието
на брояча
приема стойността
(Бр) = 11111+1 = 00000 .
При
това тук в
този пример, k-тият
разряд на
брояча се
нулира ((Бр.[k])=0), от
което се
разбира, че
отрицателното
препълване в
полето на
характеристиката
е
компенсирано
(отнето).
Така
окончателно
от знак,
характеристика
и мантиса в
разрядната
мрежа се
сглобява резултатът:

Това
съдържание
представя
числото:
![]()
ПРИМЕР 167. Да се
изпълни
операция
деление Z=X/Y на
числата X=-0,11011.2+5 и
Y=-0,10011.2-2, които
са
представени
в разрядна
мрежа с обща
дължина n=12[b]=m+k, където k=4[b]
е
дължината на
полето за
представяне
на характеристиката,
а m=8[b] е
дължината на
полето за представяне
на мантисата.
Числата
са
представени
в разрядната
мрежа от
следните
комбинации:
X Þ 1 1101 1101100
; Y Þ 1 0110 1001100
Характеристиките
на числата се
изваждат по
следния
начин:

При
това изваждане
няма
препълване и
тригерът на
препълването
остава в
състояние
нула (ТП=0). Така получената
на изхода на
суматора
сума се коригира
автоматично
при
записването
си в брояча
на
характеристиките.
Броячът приема
стойността (Бр)=01111,
където в
неговия най-старши
разряд се
записва нула,
а в
по-младшия –
стойността:
![]()
След първоначалното събиране и коригиране на характеристиките следва делението на двете мантиси. То е извършено по метода без възстановяване на остатъците по схемата с неподвижен делител по модул чрез алгоритъма на малките остатъци. Знаците на операндите са формирали знака на частното предварително.

При
разделяне на
мантисите
полученото
число
![]()
е
по-голямо от
единица. Освен
това е
получено с
два
допълнителни
разряда. Това
число следва
да се
нормализира като
се измести на
един разряд
надясно. За да
не загуби от
точността си,
т.е. младшите
три бита, ще
извършим
закръгление
и мантисата
ще приеме
стойността
![]()
Извършената
нормализация
на мантисата
на частното
води до
корекция на
характеристиката,
която се
увеличава с
единица, като
съдържанието
на брояча
приема
стойността
(Бр) = 01111+1 = 10000 .
При
това тук, в
този пример, k-тият
разряд на
брояча
приема
единица, от
което се
разбира, че
той се
препълва.
Окончателно
става ясно,
че
полученото
частно е
прекалено
голямо число
и не може да
се представи
в така
дадената
разрядна
мрежа. В
резултат на
това се
генерира
признак за “препълване
при плаваща
запетая”.
ПРИМЕР
168. Да се
изпълни
операция
деление Z=X/Y на
числата X=-0,11011.2+5 и
Y=-0,10011.2-5, които
са
представени
в разрядна мрежа
с обща
дължина n=12[b]=m+k,
където k=4[b] е
дължината на
полето за
представяне
на
характеристиката,
а m=8[b] е
дължината на
полето за
представяне
на мантисата.
Числата
са
представени
в разрядната
мрежа от
следните
комбинации:
X Þ 1
1101 1101100 ;
Y Þ 1
0011 1001100 .
Характеристиките
на числата се
изваждат по
следния
начин:

При
това
изваждане
настъпва
дълбоко препълване
в полето на
характеристиката,
което
тригерът на
препълването
регистрира
(ТП=1). Това
препълване
не може да
бъде отнето,
а напротив, в
случай на
препълване в
полето на мантисата,
както в
предидущия
пример, то
може да бъде
само засилено!
Ето защо
делението в
този случай
завършва с
генериране
на признак “препълване
при плаваща
запетая”.
ПРИМЕР 169. Да се
изпълни
операция
деление Z=X/Y на
числата X=0,11.2-2 и
Y=0,11.2+2, които
са
представени
в разрядна
мрежа с обща
дължина n=12[b]=m+k,
където k=4[b] е
дължината
на полето за
представяне
на
характеристиката,
а m=8[b] е
дължината на
полето за
представяне
на мантисата.
Резултатът
от това
деление е
следният:
![]()
Числата
са
представени
в разрядната
мрежа от
следните
комбинации:
X Þ 0
0110 1100000 ; Y Þ 0
1010 1100000 .
Характеристиките
на числата се
изваждат по
следния
начин:

Полученото
частно
![]()
е
число равно
на единица.
Това число
следва да се
нормализира
като се
измести на
един разряд
надясно като
приема
стойността
![]()
Извършената
нормализация
на мантисата
на частното
чрез
изместване
надясно води
до корекция на
характеристиката,
която се
увеличава с единица,
като
съдържанието
на брояча
приема
стойността
(Бр) = 00100+1 = 00101 .
Така
окончателно
от знак,
характеристика
и мантиса в
разрядната
мрежа се
сглобява резултатът:

Това
съдържание
представя
числото:
![]()
Следващият
раздел е:
5.4
Операции
върху числа,
представени във
форма с
плаваща
запетая чрез
техниката на
скрития бит