5-8. М Е Т О Д Ы |
У С К О Р Е Н И Я |
Д Е Л Е Н И Я |
Аппаратные методы ускорения деления аналогичны описанным выше аппаратным методам ускорения умно жения. К ним относятся: ускорение выполнения сложе ния и сдвига, совмещение по времени операций сложе ния и сдвига и др. К логическим методам ускорения де ления относятся методы, позволяющие за один такт получить несколько разрядов частного.
Рассмотрим некоторые логические методы ускорения деления. Предположим, что действия производятся над числами с запятой, фиксированной перед старшим раз рядом. Предположим также, что делитель нормализо ван, т. е. имеет в старшем разряде 1. Если делимое име ет в старшем разряде 0, то очевидно, что делитель боль ше делимого и в старшем разряде частного должен быть записан 0. Если делимое имеет вид:
т
одГГТсГіхх
где X — означает 0 или 1, то очевидно, что старшие т разрядов частного будут иметь значение 0.
В этом случае можно записать в частное 'т нулей и сдвинуть делимое на т разрядов влево. Для опреде ления следующей цифры частного необходимо вычесть делитель из частичного остатка.
Предположим, что в результате k последовательных вычитаний в очередных k разрядах частного записыва ются единицы. В этом случае частичный остаток после образования данной группы единиц в частном имеет зна
чение |
|
{•••{[(в — Ь)2 — Ь] 2 — Ь) 2 ----------b \= a 2 k — |
|
— b (2* + 2fe~’ -f 2k~2Н-------h 2 + 1) = |
|
= a2k— b (2*+I — 1) = a2k — b2k+1 + b. |
(5-8) |
Таким образом, при образовании в частном группы из k единиц достаточно вместо k последовательных вы читаний делителя сделать первое вычитание на разряд раньше, затем сдвинуть полученный остаток на k разря дов, записав в частное k единиц, и прибавить делитель. Поэтому если при вычитании делителя результат обра зуется в дополнительном коде и известно, что следующая
цифра частного равна единице, то можно сдвигать ча стичные остатки и записывать в разряды частного еди ницы до тех пор, пока в результате добавления делите ля частичный остаток образуется в прямом коде.
Поскольку мы условились, что старший разряд дели теля содержит единицу, то результат будет получаться в прямом коде тогда, когда в старшем разряде частич ного остатка в дополнительном коде будет находиться единица. Это делает возможным сдвиг частичного остат ка и образование единиц в стольких разрядах частного, сколько единиц стоит подряд в дополнительном коде ча стичного остатка.
Можно сформулировать следующие правила при де лении на нормализованный делитель:
1.Когда частичный остаток в прямом коде имеет т нулей подряд, начиная со старшего разряда, надо сдви нуть его на т разрядов влево, записать в очередные раз ряды частного т нулей и вычесть из сдвинутого остатка делитель. Если результат получен в прямом коде, то в очередной разряд частного записывается единица и час тичный остаток сдвигается на все разряды, содержащие нули, после чего вновь производится вычитание делите ля. Если после вычитания результат получен в дополни тельном коде, то в очередной разряд частного записыва ется нуль.
2.При наличии в частичном остатке k единиц начи ная со старшего разряда он сдвигается на k разрядов влево, в очередные к разрядов частного записываются единицы и к остатку прибавляется делитель. После образования результата сложения действия выполняют ся в соответствии с перечисленными правилами.
Описанный алгоритм деления позволяет уменьшить среднее число суммирований. При введении дополнитель ных цепей сдвига он дает возможность сократить коли чество тактов деления по сравнению с приведенными выше методами деления. Однако при некоторых комби нациях цифр частного этот метод не дает ускорения. Ес ли в разрядах частного чередуются нули и единицы (частное имеет вид 010101...), то скорость выполнения деления по данному алгоритму такая же, как и при обычном делении без восстановления остатка.
Когда в частном после ряда нулей идет ряд единиц, сдвиг на все единицы возможен только в том случае, ес ли после сдвига на все нули и сложения делителя с час-
ТиЧнЬім остатком новый частичный остаток получился й
дополнительном |
коде. Если же результат выражается |
в прямом коде, |
то необходимо для получения каждой |
единицы в частном выполнять отдельное вычитание. Это особенно часто встречается при малых делителях, так как маловероятно, чтобы малый делитель изменил знак частичного остатка.
Для улучшения описанного алгоритма используют числа, кратные делимому [Л. 101].
5-9. С Л О Ж Е Н И Е И В Ы Ч И Т А Н И Е Ч И С ЕЛ С П Л А В А Ю Щ Е Й ЗА П Я Т О Й
В гл. 2 описан способ представления в вычислитель ной машине чисел с плавающей запятой. Числа хранятся в запоминающем устройстве в виде кода, часть разря дов которого отведена под мантиссу числа со знаком, а другая часть изображает порядок со знаком.
|
|
Р егист р |
ѵи сл а / |
|
\ \ |
д а д я д я х ■ |
М ант исса |
|
|
|
|
|
Римма/лар |
Руляматар мантиссб/ |
|
|
іуаряина |
|
rf |
|
|
Раряран |
Мантисса |
|
! |
|
Р егист р |
v u c s a M |
|
|
Рис. 5-18. Блок-схема АЛУ с плавающей запятой.
Выполнение арифметических операций с плавающей запятой требует выполнения операции как над мантис сами, так и над порядками. Поэтому в ЦВМ обыч но имеются два сумматора, каждый из которых имеет свой знаковый разряд и разряд переполнения. Блок-схе ма АЛУ для чисел с плавающей запятой показана на
рис. 5-18.
В данной главе при рассмотрении действий над чис лами с плавающей запятой основание характеристики принято равным 2.
Разряд переполнения в сумматоре мантисс определя ет нарушение нормализации при выполнении операций арифметического сложения и деления. Разряд перепол нения в сумматоре порядков фиксирует образование чи сел, выходящих из диапазона, с которыми может рабо тать данная ЦВМ. Непосредственное сложение или вы читание мантисс двух чисел может быть произведено только в случае, если равны их порядки. Поэтому перед выполнением сложения или вычитания необходимо срав нивать порядки чисел и производить в случае необходи мости выравнивание порядков путем сдвига мантиссы од ного из слагаемых (см. гл. 2).
При сравнении порядков в сумматоре производится вычитание порядка второго числа р2 из порядка первого числа р\. При этом возможны пять случаев:
1. р\—Рг>П2 («2 — число разрядов мантиссы). В этом случае в качестве результата суммирования сра зу же может быть взято первое слагаемое, так как при выравнивании порядков все разряды мантиссы второго слагаемого принимают нулевое значение.
2.р2—Рі> « 2. В этом случае в качестве результата суммирования может быть взято второе слагаемое.
3.р\—р2 = 0. В этом случае производится суммиро вание мантисс. После образования результата исследу ется состояние разряда переполнения сумматора ман тисс и состояние старшего разряда мантиссы. Если в разряде переполнения стоит 1, то необходимо произвести нормализацию вправо. Если в старшем разряде мантис сы находится 0, то необходимо произвести нормализа цию влево.
4. рі—P2= k \(k i < n 2) . В этом случае мантисса вто рого слагаемого сдвигается на kx разрядов вправо, за тем производится суммирование мантисс, а результату присваивается порядок первого слагаемого. После обра зования результатов, если это необходимо, производит ся нормализация.
5. р2—Pi = k2(k2< n 2). В этом случае перед выполне нием суммирования мантисс производится сдвиг на &2 разрядов вправо мантиссы первого слагаемого. Резуль тату присваивается порядок второго слагаемого. После образования результата, если это необходимо, произво дится нормализация.
Таким образом, выполнение суммирования чисел с плавающей запятой включает в себя следующие этапы:
сравнение порядков слагаемых, выравнивание порядков, суммирование мантисс, нормализацию результата.
В табл. 5-8 приведены пять примеров сложения двух положительных чисел с плавающей запятой. Для облег чения понимания использованы десятичные числа. Пред полагается, что число разрядов мантиссы равно пяти, а для представления порядка использован один разряд. В записи 4/82033 число 4 относится к порядку, а число 82033 — к мантиссе.
1 |
2 |
3 |
4 |
5 |
Т а б л и ц а |
5-8 |
Операция |
|
8/41500 |
3/78000 |
4/68000 |
5/24000 |
4/00510 |
Сравнение поряд- |
1/35700 |
9/34000 |
4/5 1000 |
3/18000 |
5/04800 |
КОВ |
|
|
|
|
5/24000 |
5/00051 |
|
|
|
|
Выравнивание |
по- |
|
|
|
5/00180 |
5/04800 |
рядков |
|
|
|
4/119000 |
5/24180 |
5/04851 |
Суммирование |
|
|
|
N. |
5/24180 |
/ |
мантисс |
|
8/41500 |
9/34000 |
5/11900 |
4/48510 |
Нормализация |
ре- |
зультата
Вмашинах с плавающей запятой в отличие от машин
сфиксированной запятой сложение выполняется при ближенно, так как при выравнивании порядков проис ходит потеря младших разрядов одного из слагаемых. Если не производить округления результата, то погреш ность всегда будет отрицательна и может доходить по величине до единицы младшего разряда. Чтобы умень шить величину ошибки, производят округления резуль тата. Для этого используется дополнительный разряд сумматора, в который после выполнения суммирования добавляется единица.
5-10. У М Н О Ж Е Н И Е И Д Е Л Е Н И Е Ч И С ЕЛ С П Л А В А Ю Щ Е Й ЗА П Я Т О Й
При умножении чисел с плавающей запятой ман тисса произведения определяется как произведение ман тисс сомножителей, а порядок произведения как сумма их порядков. Перемножение мантисс осуществляется лю бым способом умножения, описанным выше.