- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Операция алгебраического умножения
Автор не преследует цель изложить все известные способы выполнения умножения в частности потому, что их много, и хитроумные изобретатели продолжают патентовать устройства, в которых используют новые варианты выполнения операции умножения. Он не предлагает готовые рецепты. С известными способами умножения лучше знакомиться в патентной библиотеке.
Автор преследует цель показать лишь некоторые подходы к задаче умножения, чтобы проявить много вариантность ее решения и побудить читателя к поиску новых способов вычисления произведения. В ходе изложения уделяется много внимания способам преобразований, которые могут быть взяты читателем на вооружение в его творческом поиске новых решений.
Рассматривается в основном выполнение операции умножения операндов в двоичной системе счисления в дополнительном коде. Способы умножения операндов в прямом коде являются частным случаем способов умножения в дополнительном коде при положительных операндах, и их можно получить, упрощая способы умножения в дополнительном коде.
Способы умножения в обратном коде не рассматриваются вовсе, так как этот код редко используют для представления чисел. Кроме того, внимательное рассмотрение подходов и принципов построения способов умножения в прямом и дополнительном коде позволит читателю самостоятельно конструировать способы умножения в обратном коде.
В разделах 4.4.1 – 4.4.4 рассмотрены способы точного умножения.
Умножение в прямом коде
Результат умножения
в прямом коде двух операндов без знака
содержащих
и m
значащих
разрядов имеет
значащих разрядов. При
разрядность результата равна
.
Например, в десятичной системе счисления
999´99=98901.
При умножении
операндов со знаком и
значащими разрядами произведение,
содержит
разряд. Поэтому при записи произведения
в формат, вдвое превышающий формат
операндов, существует слева один
избыточный значащий разряд, в который
следует записывать 0. Например, если
операнды со знаком представлены в прямом
двоичном коде в шестнадцати битовом
формате, то значащих разрядов 15, и
разрядность произведения, включая его
знак, 2´15+1=31.
Поэтому в 32 разрядный формат придется
записывать 0 в разряд, следующий за
разрядом знака.
Знак произведения вычисляют сложением по модулю 2 знаковых разрядов операндов, в том числе, если один или оба операнда равны 0.
Значащие разряды
произведения целых чисел вычисляют,
перемножая операнды как числа без знака.
Результат умножения
целых чисел без знака должен быть равен
результату Y-кратного
сложения X
с самим собой. Дробные числа перемножают
как целые, а положение запятой в
произведении определяют, отсчитывая,
справа налево столько разрядов, сколько
дробных разрядов в операндах вместе.
Чтобы сократить
количество сложений используют таблицы
умножения цифр и тот факт, что результат
умножения числа на основание системы
счисления P
совпадает
со значением этого числа, сдвинутым на
один разряд влево с занесением 0 в крайний
правый разряд. Например, в десятичной
системе счисления:
;
в двоичной:
.
Вычисляют частные произведения множимого X на каждый разряд множителя Y. Вес частного произведения учитывают сдвигом его влево на необходимое число разрядов относительно частного произведения X на младший разряд Y. Суммируют частные произведения с учетом их веса равного весу разряда множителя.
Этот прием используют
при умножении десятичных чисел на
бумаге. При умножении в системе счисления
с основанием
все действия выполняются аналогично.
Отличие лишь в том, что используется
таблица умножения цифр системы счисления
с основанием P
и сложение выполняется по правилам
справедливым в этой системе счисления.
Таблицы умножения
цифр системы счисления P
можно получить, перемножив количественные
эквиваленты ее цифр в десятичной системе
и представив результаты в системе
счисления с
основанием P.
Например, произведение цифр
шестнадцатеричной системы счисления
имеет количественный эквивалент
.
Следовательно,
,
и результат умножения в данном разряде
равен 716,
а перенос в следующий разряд равен 816.
Составьте самостоятельно таблицы умножения двоичных, восьмеричных и шестнадцатеричных цифр, используя изложенный способ.
При вычислении
частных произведений в системе счисления
с основанием
необходимо учитывать переносы в старшие
разряды, возникающие при умножении
цифры X
на цифру Y.
В двоичной системе такие переносы
отсутствуют, что существенно упрощает
умножение.
В двоичной системе счисления частное произведение числа X на цифру числа Y равно
0, если цифра Y равна 0;
X, если цифра Y равна 1.
Пример 4-25.
Пусть необходимо перемножить прямые
двоичные коды чисел 0|1101|01 и 1|1011|10.
Определим знак результата:
– знак произведения минус.
Н
айдем
матрицу частных произведений значащих
разрядов.
Первая и предпоследняя строки матрицы нулевые, так как они содержат частные произведения X на разряды Y равные нулю. Остальные строки содержат X, так как соответствующие им разряды Y равны 1. Каждое последующее частное произведение сдвинуто на разряд влево относительно предыдущего, чтобы учесть его вес (удвоить).
Произведение можно вычислять суммированием частных произведений так, как это обычно делают в десятичной системе счисления. Причем порядок сложения цифр столбца и переносов в столбец не играет роли.
Можно поступать иначе, поочередно складывать строки матрицы в любом порядке. Например, сверху вниз: первую строку со второй; их сумму с третьей и т.д. Ничто не мешает складывать строки снизу вверх.
В вычислительной технике часто используют способ вычисления произведения, основанный на подсчете количества единиц в столбцах матрицы. Если количество единиц в столбце матрицы (включая единицы переноса в этот столбец из предыдущих столбцов) представить двоичным числом, то цифра младшего разряда этого числа является цифрой произведения в данном столбце. Последующие разряды имеют значения равные значениям переносов из данного столбца в последующие столбцы матрицы. Подсчет единиц в столбцах следует выполнять поочередно, начиная с правого столбца, и учитывать единицы переноса из предыдущих столбцов.
Так, например, если в столбце пять единиц, включая единицы переноса в этот столбец, то код числа единиц в данном столбце 101. Так как младший разряд кода 1, то разряд произведения в данном столбце 1. Перенос в следующий слева столбец равен 0, а перенос в последующий столбец 1.
Этот способ ускоряет распространение переносов, так как некоторые из них минуют промежуточные столбцы.
В примере 4-25 в правом столбце 0 единиц, сумма равна 0 и нет переносов в последующие столбцы. Во втором столбце код числа единиц 01. Следовательно, сумма в столбце равна 1 и перенос в последующий столбец 0. Продолжите вычисление результата этим способом самостоятельно.
В системах счисления
с основанием
,
вычисление частных произведений
существенно осложняется по сравнению
с двоичной системой, так как произведение
цифр больших, чем 1 может быть двухразрядным
числом. Например, в десятичной системе
счисления
.
Это приводит к необходимости выполнять
прибавление переносов при вычислении
частного произведения множимого на
цифру множителя. Чтобы избежать
прибавления переносов при вычислении
частного произведения, можно представить
частное произведение в матрице в виде
двух строк. В одной строке записывать
цифру произведения, а в другой – цифру
переноса с соответствующим сдвигом.
Суммируя все строки матрицы, получим
результат умножения.
Пример 4-26.
Пусть необходимо перемножить прямые
десятичные коды чисел +9063 и –8015. Знак
произведения вычислим сложением по
модулю 2 знаковых разрядов сомножителей:
.
Для вычисления частного произведения X на разряд Y умножаем разряды X на разряд Y и представляем частное произведение парой строк в матрице.
В варианте A верхняя строка пары содержит цифры переноса, а нижняя – цифру произведения в данном разряде. Поэтому верхняя строка в каждой паре сдвинута на разряд влево относительно нижней строки. Верхняя пара строк представляет частное произведение на младший разряд множителя равный 5. Следующая пара строк представляет частное произведение на цифру 1 множителя и сдвинута на разряд влево относительно предыдущей пары, чтобы учесть ее вес 10.
Этот прием позволяет учитывать переносы, возникающие при вычислении частного произведения, в процессе сложения строк матрицы.
A B C D E F
X: 0|
9063 9063
9063 9063 FF
1111
1111 Y: 1|
8015 8015
8015 8015 FF
1111
1111 4031 5005
7042 0015 E1
1110 0001
5005 4031
2084 4530 E1
1110 0001
0000 9063
0000 0003 E1
1110 0001
9063 0000
0000 0906 E1
1110 0001
0000 0000
0000 0000 FE01
1111 1110 0000
0001
0000 0000
9063 0000
7042 2084
4031 0024
2084 7042
5005 7248 1|
72639945 72639945
72639945
72639945
Существенно, что порядок размещения строк в матрице не влияет на результат умножения (варианты B и C). Это позволяет вычислять пары строк частных произведений в любой очередности, например, умножать, начиная со старшего (вариант C), а не с младшего разряда множителя (варианты A и B).
Очевидно, что перемещение цифры в пределах одного столбца не может изменить значения суммы строк, т.е. величину произведения. В варианте D цифры смещены так, чтобы строки частного произведения содержали пары разрядов произведений цифры множимого на цифру множителя. Например, первая пара строк содержит произведения цифр 9063 на 5, т.е. 45 00 30 15.
Ничто не мешает вычислять пару строк частного произведения множимого на цифру множителя, начиная с любого разряда множимого. Например, в варианте D, умножать на цифру 5, начиная со старшего разряда множимого и вначале записывать 45, затем 00, 30 и 15.
Более того, можно умножать на все разряды множителя одновременно и располагать строки в любом порядке, но делать это вручную сможет не каждый. Необходимо лишь обеспечить правильное смещение строк вправо или влево учитывающее разницу в весах разрядов множителя.
Цифра младшего разряда произведения всегда равна единственной цифре в столбце младшего разряда. Поэтому этот столбец можно опустить, сразу записывая его цифру в младший разряд результата. Остальные цифры произведения можно вычислять подсчетом числа единиц в столбцах с учетом переносов, начиная со столбца второго разряда справа.
В вариантах A, B, C и D в столбцах 2, 3 и 4 разряда количество единиц 4, 9 и 9 соответственно, и нет переносов в последующие столбцы. В столбце 5 количество единиц 4+9+2+8=23. Поэтому цифра произведения в пятом столбце 3 и перенос в столбец 6 равен 2. Если количество единиц в столбце равно, например 234, что может быть при умножении много разрядных чисел, то цифра произведения в этом столбце 4, перенос в следующий столбец 3, а в последующий столбец 2.
Все сказанное предоставляет очень большую свободу выбора при организации процесса вычислений произведения и справедливо для всех позиционных систем счисления с основанием .
В варианте E выполнено умножение шестнадцатеричных чисел. Матрица частных произведений построена по тому же принципу, что и в варианте D. Для умножения в этой системе счисления нужно помнить таблицу умножения размерностью 16´16, что сложнее сделать, чем в десятичной системе счисления (размерность 10´10) и тем более чем в двоичной (размерность таблицы 2´2). Произведение F´F=E1, так как 1510´1510=22510= E116.
В варианте F шестнадцатеричные цифры F, E и 1 в строках чисел варианта D заменены их двоичными эквивалентами. Фактически выполнено преобразование шестнадцатеричных чисел в двоичные. Вариант F можно рассматривать как иллюстрацию способа умножения двоичных чисел с применением таблицы умножения шестнадцатеричных чисел. Он позволяет по сравнению со способом умножения в примере 4-25 сократить длину пробега переноса и вдвое уменьшить количество строк в матрице частных произведений.
