
- •1.4. Алфавитное представление и преобразование информации
- •Глава 2
- •2.1. Непозиционные системы счисления
- •2.2. Позиционные системы счисления
- •Неоднородные позиционные системы счисления
- •Однородные позиционные системы счисления
- •2.3. Кодированные позиционные системы счисления
- •2.4. Системы счисления специального назначения
- •2.6. Символические системы счисления
- •2.7. Перевод чисел из одной системы счисления в другую
- •Перевод целых чисел из одной позиционной системы счисления в другую
- •2.8. Выбор системы счисления для применения эвм
- •2.9. Двоичная система счисления
- •2.10. Представление двоичных чисел в эвм
- •2.11. Точность представления чисел в эвм
- •Глава 3
- •3.1. Основные понятия
- •3.2. Операция алгебраического сложения в эвм
- •3.3. Операция сдвига
- •3.4. Сложение чисел в машинах с плавающей запятой
- •8.5. Округление чисел в эвм
- •3.6. Точность выполнения операций в машине с плавающей запятой
- •3.7. Вычисления с двойной точностью
- •Глава 4
- •4.1. Общие сведения об операции умножения
- •4.2. Умножение, выполняемое методом накопления частичных произведений
- •4.3. Сравнение схем умножения методом накопления
- •4.4. Методы ускорения операции умножения
- •4.5. Умножение чисел, заданных в дополнительном коде
- •4.6. Умножение чисел в машинах с плавающей запятой
- •4.7. Особенности выполнения операции умножения в современных эвм
- •4.8. Деление чисел с восстановлением остатков
- •4. 9. Деление без восстановления остатков
- •4.10. Машинные схемы деления
- •4.11. Деление чисел в дополнительном коде
- •4.13. Деление чисел в машинах с плавающей запятой
- •Глава 6
- •6.1. Сложение в прямых д-кодах
- •6.2. Сложение чисел в инверсных д-кодах
- •Для кода д2
- •6.3. Сдвиг д-кодов
- •6.4. Умножение чисел в д-кодах
- •6.5. Деление чисел в д-кодах
- •6.6. Перевод чисел в д-кодах
6.4. Умножение чисел в д-кодах
Умножение чисел в Д-кодах сводится к последовательному суммированию частных произведении, получаемых при умножении множимого на очередную цифру множителя. При этом умножение сопровождается расшифровкой значения очередной i-й тетрады множителя, которая представляется в виде (i и сдвигом множителя на четыре разряда сразу.
Самым простым приемом расшифровки тетрады является последовательное вычитание единицы из значения тетрады до получения нуля и соответственно прибавление множимого в сумматор на каждом такте. Так как при умножении множимого на тетраду возможно переполнение разрядной сетки сумматора (вследствие того что множимое прибавляется к сумме частичных произведений столько раз, сколько единиц содержится в данном десятичном разряде множителя), то в нем необходимо предусмотреть дополнительную тетраду для учета возникающих переносов. Из четырех возможных способов умножения в двоично-десятичной системе целесообразно применять только один: умножение младшими разрядами множителя со сдвигом суммы частичных произведений вправо. Умножение обычно производится в прямом коде, т. е. знак результата определяется суммой знаков сомножителей по модулю 2.
Пример. Умножить в прямом Д2 коде числа
А = -0,45; [А]пр= 1,0111 1000;
В =+0,24; [В]пр = 0,0101 0111.
Знак результата определяется так же, как и в случае двоичной системы: 1 1, Для выполнения операции умножения необходим трех тетрадный сумматор.
Рг В
СМ
0101 _ 0111 0011 0011 0011
0001 +A + 0111 1000
_ 0110 1010 1011
0001 Поправка + 1101 1101
_ 0101 +А 0111 1000
0001 + 0111 1000
_ 0100 1111 0000
0001 Поправка + 1101 0011
0011 1100 0011
+ А + 0111 1000
Конец анализа 0100 0011 1011
Поправка + 0011 1101
0100 0110 1000
+ А + 0111 1000
0100 1110 0000
Поправка + 1101 0011
0011 0101 Сдвиг на 4 разряда 0100 1011 0011
- 0001 0011 0100 1011 0011
0100 +A + 0111 1000
1100 0011
- 0001 Поправка + 1101 + 0011
0011 Конец анализа 1001 0110
+A + 0111 1000
0100 0000 1110
Поправка + 0011 + 1101
0100 0011 1011 0011
Таким образом, [А • В]пр= 1,0100 0011 1011 0011.
Если сомножители имеют по п десятичные разрядов, то в регистре множимого должно быть п
разрядов (тетрад) справа от запятой, а в сумматоре должно быть п основных разрядов, одна тетрада переполнений и один (п+1)-й дополнительный десятичный разряд (ДДР), который предназначен для округления результата (в коде Д2 для округления достаточно иметь один дополнительный двоичный разряд). При необходимости сохранить все 2п разрядов произведения справа от сумматора должен быть еще сдвиговый регистр для младших разрядов произведения. Регистр множителя должен иметь п тетрад справа от запятой. Причем, если младшая тетрада этого регистра выполнена в виде реверсивного счетчика, т. е. счетчика, который может прибавлять или вычитать единицу, то операцию умножение можно ускорить в среднем почти в два раза. В этом случае необходимо иметь специальный разряд для записи 1, если при суммировании в счетчике-тетраде появится код 1010.
Такой состав оборудования объясняется следующим образом. Если очередная цифра множителя, находящаяся в младшей тетраде (счетчике) регистра множителя, равна или меньше 510, то производится многократное прибавление множимого к сумме частых произведений сумматора. При каждом суммировании множимого вычитается 1 из счетчика. Такие действия выполняются до тех пор, пока на счетчике не появится код 0. Если же очередная цифра множителя равна или больше 610 то производится многократное вычитание (сложение в дополнительном Д-коде) множимого из суммы частичных произведений сумматора. При каждом вычитании множимого к содержимому счетчика прибавляется 1. Вычитания продолжаются до тех пор, пока в счетчике не появится код 1010. При этом в специальный разряд записывается 1.
По окончании анализа текущей тетрады множителя производится сдвиг на одну тетраду вправо суммы частичных произведений и множителя. При этом в счетчик регистра множителя сдвигается следующая тетрада множителя, к которой прибавляется содержимое специального разряда, т. е. 1, если она была там записана. Операция умножения заканчивается сдвигом множителя и суммы частичных произведений. Всего должно быть выполнено п сдвигов. На последнем сдвиге в счетчик сдвигается нуль множителя. Если при этом в него добавляется 1 из специального разряда, то операция умножения заканчивается прибавлением множимого к сумме частичных произведений. В результате получается
2п-разрядное произведение.
Таким образом, описанный алгоритм позволяет существенно сократить время умножения практически без изменения состава оборудования. Если необходим п -разрядный результат, то произведение округляется путем прибавления к ДДР, т. е. к (п + 1)-й тетраде, числа 510.
Пример. Задано А=0,36710, В=0,58310. Найти произведение С=АВ и округлить до 3-х разрядов. Все действия для простоты выполняем в десятичном коде. Квадратной рамкой обведён счётчик в регистре множителя (PrB), счетчик тактов (разрядов) умножения (СЧТ) и специальный разряд (СПР). На сумматоре (СМ) самый левый разряд (от запятой) – двоичный (знаковый), а второй слева (разряд переполнений)- десятичный.
СМ РГ В СПР СЧТ
00,000000
,58 3 0
0
+ 00,367 [+a10]д -1
00,367000 ,58 2
+ 00,367 [+a10]д -1
00,734000 ,58 1
+ 00,367000 [+a10]д -1
01,101000 ,58 0
00,110100 Сдвиг ,05 8 +1 1
+ 19,633 [-a10]д +1
1 9,743100 ,05 9
+ 19,633 [-a10]д +1
1
9,376100
,05 10 1
Сдвиг
,00 5 +1 +1 2
1 9,937610 ,00 6 0
+ 19,633 [-a10]д +1
19,570610 ,00 7
+ 19,633 [-a10]д +1
1 9,203610 ,00 8
+ 19,633 [-a10]д +1
1 8,836610 ,00 9
+ 19,633 [-a10]д +1
1 8,469610 ,00 10 1
Сдвиг
,00 0 +1 +1 3
1 9,846961 ,00 1 0
00,367 [+a10]д -1
0 0,213961 ,00 0
+ 5 окр
00,214
Таким образом, C=AB = 0,21410
Дальнейшим развитием описанного способа ускорения операции умножения в Д- кодах является формирование кратных множимого А. Например, при наличии кратных 2А и 4А частое произведение
Таблица 6.2
Текущая цифра множителя
|
Вид операции |
Текущая цифра множителя
|
Вид операции |
0 1 2 3 4 |
0 +А +2А +А+2А +4А |
5 6 7 8 9 |
+А+4А -А -А-4А -2А -А |
формируется следующим образом в зависимости от текущей цифры множителя В (табл. 6.2).
При этом, если предыдущая цифра В была больше пяти, то действие на очередном шаге надо увеличить на + 1А. Как видно из таблицы, в худшем случае для данного способа потребуется всего 2 действия алгебраического сложения при получении одного частного произведения, а в среднем для этого необходимо I, 2 сложений — вычитаний. Способ позволяет анализировать очередную цифру множителя простыми аппаратными средствами. Для его реализации потребуется еще два регистра для хранения 2А и 4А или коммутатор для формирования 4А и 2А путем сдвига А соответственно на 2 и 1 разряд.
Другой прием, применяемый для ускоренного умножения, сводится к следующим пошаговым преобразованиям произведения:
АВ = 2А В/2, если В — четное число;
АВ = 2А (В-1)/2 + А, если В — нечетное число.
Пример. Задано А = 35, В = 34. Найти С = А • В.
35 • 34=2 • 35•34/2 = 70 • 17 = 140 • 8+70 = 280 • 4 + 70 = 560 • 2 + 70= 1120 • 1 + 70= 1190.
Таким образом, С= АВ= 1190.
При этом удвоение числа означает его сдвиг влево, а деление на 2 — сдвиг вправо. Так как двоичные сдвиги производятся над двоичными кодами, то требуется коррекция тетрад на каждом шаге. Как видим, сложения производятся только при нечетном множителе. Наибольшее их количество возможно при В = 2n— 1 и равно (п— 1), а при В = 2n производятся только сдвиги множимого и множителя.
Качественную оценку эффективности рассмотренных способов умножения дает сравнение числа сложений, которое необходимо для получения полного произведения по каждому из способов, например, при В = 0,583:
1. Только суммирование множимого. Количество сложений: 5 + 8 + 3 = 16.
2
.
Суммирование и вычитание множимого,
которое при этом практически имеет вид
В =1,4
23, где черта над
цифрой означает вычитание. Тогда
количество сложений составит: 1 + 4 + 2 + 3
= 10.
3 Суммирование и вычитание кратных множимого. Количество сложений: 2+1+2 = 5.
4. Пошаговое формирование произведения путем двоичного сдвига множимого и множителя. Количество сложений: 1 + 1 + 1 + 1 == 4.
Таким образом, если учесть, что в реальных ЭВМ количество разрядов значительно больше трех, то выигрыш в быстродействии при выполнении умножения ускоренными методами окажется еще более существенным.