- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Умножение дополнительного кода множимого на модуль множителя
Умножение множимого X на положительный множитель Y равносильно –кратному сложению множимого с нулем, а умножение на отрицательный множитель равносильно –кратному вычитанию множимого из нуля. –кратное сложение и –кратное вычитание множимого можно заменить соответственно сложением/вычитанием сдвинутых на требуемое количество разрядов частных произведений множимого на разряды множителя.
Поскольку множимое представлено в дополнительном коде, то для получения произведения в этом же коде, операции сложения/вычитания следует выполнять в дополнительном коде. Такой вариант вычисления произведения исключает преобразования множимого и произведения из одного кода в другой.
Дополнительный код положительного множителя совпадает с . Поэтому умножение на положительный множитель не требует вычисления . Если множитель отрицательный, то для вычисления необходимо выполнить преобразование дополнительного кода Y в прямой код.
Если код 1|00…0доп применяется для кодирования числа , разрядность кода возрастет на один разряд, что усложняет вычисление произведения. Поэтому обычно операнды проверяют на 0, на 1|00…0доп и вычисляют произведение на 0, результат умножения на 1|00…0доп, знак произведения и дополнительный старший значащий разряд по отдельным правилам (раздел 4.4.2).
Вычисление можно совместить с формированием матрицы частных произведений, если воспользоваться способом непосредственного преобразования дополнительного кода в прямой (раздел 3.2.1.3).
Рассмотрим правила вычисления дополнительного кода произведения на примерах.
Пример 4-32.
Перемножаются двоичные дополнительные
коды операндов с количеством значащих
разрядов
.
A B C D E X: 1|000
д
(-8)
1|101
д
(-3)
1|010
д
(-6)
0|111
д
(+7)
1|010
д
(-6) Y: 0|101
д
(+5)
0|011
д
(+3)
1|101
д
(-3)
1|000
д
(-8)
1|101
д
(-3) +11111000 +11111101 –11111010 –00000000 –111010 +0000000 +1111101 –1111010 –0000000 –11010 +111000 +00000 –000000 –000000 –0000
11001000д
(-56) 11110111д
(-9) –00000 –00111 00010010д
(+18)
00010010д
(+18) 11001000д
(-56)
F G H I J X: 1|101
д
(-3)
1|001
д
(-7)
1|010
д
(-6)
0|111
д
(+7)
0|110
д
(+6) Y: 0|101
д
(+3)
0|111
д
(+7)
1|100
д
(-4)
0|111
д
(+7)
1|011
д
(-5)
+111101 +111001 –000000 +000111 –000110
+11101 +11001 –00000 +00111 –00000
+0000 +1001 –1010 +0111 –0110 11110111д
(-9) 1001111д
(-49) 0011000д
(+24) 0110001д
(+49) 1100010д
(-30)
Предварительная проверка операндов на
0 и на 1|000 не выполняется. Все разряды
дополнительного кода произведения,
включая разряд знака, вычисляются в
процессе умножения множимого на
.
В варианте
A,
так как
,
то
имеет
значащих разряда (
)
и частные произведения множимого на
разряды
складываются с нулем. Произведение
.
Поскольку при сложении частных
произведений в дополнительном коде их
форматы должны быть равными
,
отрицательные частные произведения
расширены влево цифрами обратными нулю,
а положительные – нулями. Цифры,
расширяющие частные произведения влево,
показаны во всех вариантах примера
жирным шрифтом.
Частные произведения расширены вправо нулями, заданными по умолчанию, как это делают при умножении в прямом коде.
Вариант B отличается от варианта A только значениями операндов.
В варианте C
множитель
.
Поэтому
имеет
разряда, и произведение вычисляется
вычитанием из нуля частных произведений
множимого на разряды
.
Для вычисления
следует изменить знак
.
Это можно сделать, например непосредственным
преобразованием дополнительного кода
в прямой (раздел 3.2.1.3). Цифра
,
включая код знака, заменяется на обратную,
если справа есть хотя бы одна цифра не
равная 0. Разумеется, что справа от
младшего разряда всегда нули.
В варианте D
вычисления выполняются аналогично
тому, как в варианте C.
Только при значении
(
)
последняя строка матрицы не равна 0, а
все остальные равны 0.
В вариантах E и F по отдельным правилам вычисляются разряд знака и дополнительный значащий разряд произведения, показанные жирным шрифтом. Произведение операндов с кодами 0|000доп или 1|000доп так же вычисляется по отдельным правилам. Поэтому при выполнении умножения имеет разряда. Это позволяет сократить два левых столбца и четвертую нижнюю строку в матрице частных произведений (сравните варианты E и C).
В варианте F операция выполняется по тем же правилам, что и в варианте B. Из сопоставления вариантов F и B следует, что матрица сокращается на два столбца слева.
В вариантах G-J
код 1|000 для кодирования числа не
применяется. Разрядность дополнительного
кода произведения
.
Дополнительный старший значащий разряд
отсутствует. Знаковый разряд результата
вычисляется по отдельному правилу.
Разрядность
всегда
.
Умножение дополнительного кода числа в системе счисления с основанием .
Рассмотрим особенности умножения дополнительного кода числа в системе счисления с основанием на цифры с количественным эквивалентом больше 1 или меньше (–1).
Результаты умножения
на 0, 1 или
равны 0,
или
соответственно. В этих случаях расширять
частное произведение влево до требуемой
разрядности цифрами 0 или обратными
нулю в зависимости от знака произведения
можно после умножения на цифру множителя,
что и делают, умножая в двоичной системе
счисления в примере 4-32. Умножение
на цифры большие 1 или меньше (–1), например
на 3 или на (–3) требует предварительного
расширения множимого
влево, в явной или неявной форме, цифрами
0 или обратной нулю в зависимости от
знака частного произведения. Например,
умножая в десятичной системе счисления
на 2, и расширяя дополнительный код
отрицательного произведения влево до
6 разрядов цифрой 9, получим ошибочный
результат 1| 999002доп
(–998) вместо правильного
1| 998002доп
(–1998). Почему возникла ошибка?
Результат умножения
на положительную цифру
является результатом a-кратного
сложения множимого с самим собой, а
результат умножения на отрицательную
цифру
равен результату
a-кратного
вычитания множимого из нуля. Если
множимое представлено в дополнительном
коде, то сложение/вычитание должны
выполняться по правилам справедливым
в этом коде. Поскольку результат
a-кратного
сложения или вычитания из нуля операнда
с
значащими разрядами имеет
разряд (
),
то операнд следует расширить не менее
чем на один разряд влево цифрой 0 или
обратной нулю в зависимости от его
знака.
Например, для
получения результата умножения кода
1|001доп
(-999) на 2 или на (–2) следует расширить
значащие разряды множимого до 4 разрядов
(1|9001)
и сложить их сами с собой или дважды
вычесть из нуля,
Результат
умножения
на 2 на (–2)
9001
0000 +
9001 –
9001
8002доп –
9001
1998доп
Из сказанного следует. При , для получения дополнительного кода произведения значащих разрядов на цифру множителя, пользуясь таблицей умножения, необходимо расширить множимое влево одной цифрой, так как результат умножения имеет длину . Поскольку произведение является результатом a-кратного сложения множимого по правилам сложения дополнительных кодов, то при умножении следует цифру переноса из разряда отбросить. Полученное по этому правилу произведение можно расширить влево до любого необходимого количества разрядов, приписывая 0 или цифру обратную нулю в зависимости от его знака.
A B C D E F Xдоп:
1|9005
(-995) 1|9449
(-551) 1|9999
(-1) 1|9000
(-1000) 0|0999
0|0099
4 6 9 9 9
4
996020 996694 999991 991000 008991 00039636020
(-3980) 56694
(-3306) 89991
(-9) 81000
(-9000) 08991 00396
В вариантах A-D результат умножения множителя на цифру 9, приписанную к множимому, двухразрядный, причем старший разряд отброшен (зачеркнут). Если бы множимое было расширено сразу тремя 9, то пришлось бы умножать 6-, а не 4-разрядный код, причем произведение получилось бы тем же.
В вариантах E и F множимое положительное и поэтому расширяющие цифры равны 0.
Дополнительную цифру в множимом можно задать по умолчанию и судить о ней по знаку множимого.
Обратите внимание на то, что старшая приписанная цифра в произведении определяет его знак (0 – (+); 9 – (–)).
Пример 4-34. Перемножаются десятичные дополнительные коды операндов с количеством значащих разрядов .
Слева от строк
матрицы показан знак выполняемой
операции сложения (+) или вычитания (–).
Строки матрицы расширены влево до
разрядов. Цифра, расширяющая множимое
на разряд влево, задана по умолчанию.
При вычислении частного произведения
умножение множимого на эту цифру
выполняется с отбрасыванием цифры
переноса. К полученному результату
приписываются цифры расширяющие частные
A B C D E X:
1|000
д
(-103) 1|001
д
(-999) 1|001д
(-999)
0|999д
(+999) 0|999д Y:
1|000
д
(-103) 0|999
д
1|692
д
(-308)
1|902
д
(-98) 1|902
д
9000
9001
9001
0999
0999
1000
0999
308
098
098 – 00000000 +99991009
–
992008 –
007992 –
007992 – 0000000 +9991009
–
00000 –
08991 –
08991 – 000000 +991009
–
7003 –
0000 –
0000 – 99000 +00000
0|0307692д
1|9902098д 1|902098д
0|1000000д
(+106)
9|9001999д
– 0097902
– 097902
– 0998001
В вариантах A и B код 1|000доп применяется для кодирования числа . Разрядность произведения, включая знак, Предварительная проверка операндов на 0 и на 1|000 не выполняется. Все разряды дополнительного кода произведения, включая разряд знака, вычисляются в процессе умножения множимого на .
В вариантах C
и D
код 1|000доп
применяется для кодирования числа
.
Знак, дополнительный разряд произведения
и его код при операндах
равных 0 или
1|000доп
вычисляются по отдельным правилам, что
исключает два левых столбца и четвертую
нижнюю строку в матрице, поскольку
не может иметь 4 разряда.
В варианте E
код 1|000 не применяется для кодирования
числа
.
Знак произведения вычисляется по
отдельному правилу. Дополнительный
значащий разряд в произведении
отсутствует. Код
имеет всегда
разряда, а произведение
разрядов, включая знак. Сравните варианты
D
и E.
В вариантах A и B знак частного произведения и результата представлен цифрами 0 и 9. В вариантах C, D и E разряд знака в частных произведениях отсутствует.
При выполнении вычислений в двоично-десятичной системе счисления по правилам вариантов A и B для кодирования знака потребуется 4 двоичных разряда. Чтобы сократить количество двоичных разрядов можно знак в частных произведениях кодировать цифрами 0 и 1 и выполнять сложение/вычитание в колонке знака по правилам сложения/вычитания двоичных цифр с учетом переноса/займа из предыдущего разряда. Тогда знак в произведении будет представлен цифрами 0 и 1. Аналогично можно поступить при выполнении операции в других двоично-кодированных системах счисления.
Вычисление модуля отрицательного множителя Y усложняет выполнение операции. Можно вместо умножения множимого X на отрицательного множителя выполнить умножение X на . Вычисление достигается простой заменой в отрицательном множителе значащих цифр обратными. Чтобы исключить возникающую ошибку достаточно в матрицу частных произведений ввести строку поправки, содержащую код множимого.
Пример 4-35. Перемножаются десятичные дополнительные коды операндов с количеством значащих разрядов .
В вариантах A-D код 1|000доп применяется для кодирования числа . Разрядность произведения, включая знак, Предварительная проверка операндов на 0 и на 1|000 не выполняется. Все разряды дополнительного кода произведения, включая разряд знака, вычисляются в процессе умножения множимого на .
Верхняя строка в матрице частных произведений содержит поправку.
Код имеет на 1 разряд меньше чем код , что сокращает количество частных произведений. Поэтому суммарное количество строк в матрице остается таким как при умножении на (варианты A, B примера 4-34).
A B C D E
X:
1|523
д
(-477)
0|477
д 1|000
д
(-1000)
0|999
д
(+999)
0|999
д
Y:
1|422
д
(-578)
1|422
д 1|000
д
1|000
д
(-1000)
0|902
д
9523
0477
9000
0999
0999
577
577
999
999
902 – 19999523 –
00000477 –
19999000 –
000999 +
000000 – 19996661 –
00003339 –
19991000 –
008991 +
001998 – 1996661 –
0003339 –
1991000 –
08991 +
00000 – 197615 –
002385 –
191000 –
8991 +
8991
0|0275706
д 1|9724294
д 0|1000000
д
1|9001000
д
0|901098
д
– 275706
– 999000
В варианте D знак произведения и дополнительный значащий разряд вычисляются по отдельным правилам, что позволяет сократить два левых столбца в матрице.
В варианте E код 1|000 не применяется для кодирования числа . Знак произведения вычислен по отдельному правилу. Дополнительный значащий разряд отсутствует.
При умножении на в двоичной системе счисления существует возможность совмещать строки поправки и частного произведения на младший разряд подобно тому, как это делалось в примере 4-31 раздела 4.4.2.1. Это позволяет уменьшить на 1 количество строк в матрице.
