- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Вычисление частного произведения с требуемым знаком
Вычислить частное произведение со знаком множимого с применением таблицы умножения сравнительно просто (см. пример 4-33). Особенно просто в двоичной системе счисления. Вычисление дополнительного кода частного произведения со знаком обратным знаку множимого выполняется сложнее, особенно в системах счисления с основанием . Для упрощения вычислений применяют множество различных приемов.
Поскольку ноль в дополнительном коде варианта B имеет код знака 0, то произведение множимого на цифру 0 множителя имеет код 00…0д независимо от того с каким знаком и в какой системе счисления оно должно быть вычислено.
В двоичной системе счисления произведение множимого на цифру 1 с обратным знаком можно вычислить по правилам изменения знака числа в дополнительном коде.
Непосредственное изменение знака числа в двоичном дополнительном коде.
10. Для изменения знака числа достаточно инвертировать цифры в разрядах, у которых справа есть хотя бы одна 1.9
Пример 4-48. Выполнено изменение знака дополнительного кода операнда в двоичной системе счисления по правилу 10.
В
A B C D E
X: 0|10100 0|01001 1|01100 1|10111 0|00000
-X: 1|01100 1|10111 0|10100 0|01001 0|00000
F G H I K
X: 11|00000 11|01100 00|10100 00|01001 00|00000
-X: 0|100000 0|010100 1|101100 1|110111 0|000000
В вариантах F-K принято, что код 1|00000д применяется для кодирования числа . Поэтому формат результата расширен на один разряд влево. Для этого учитывается, что в операнде слева от разряда знака размещается его копия, заданная неявно, но в примерах показанная жирным шрифтом. Эта копия преобразуется в разряд знака результата.
Изменение знака по правилу 10 требует просмотра значений разрядов справа налево, что при большой разрядности операнда замедляет процесс преобразования. Чтобы ускорить, можно разбить операнд на группы разрядов, например по 8 разрядов в группе, начиная со второго разряда справа, и вычислять параллельно признаки наличия 1 в группах. Младший разряд следует копировать в результат. Преобразования разрядов в группе выполняют с учетом значения признаков в правых группах и значения цифры в младшем разряде.
Совмещение изменения знака числа в двоичном дополнительном коде с записью кода в строку матрицы частных произведений и последующим сложением или вычитанием строки.
Если в строку матрицы должен быть записан дополнительный код частного произведения со знаком обратным знаку множимого, то для упрощения вычислений можно использовать следующие правила.
20. Вместо дополнительного кода частного произведения с обратным знаком записать в строку матрицы инверсию всех разрядов частного произведения множимого на 1 и в дополнительную строку в колонку младшего разряда частного произведения записать 1. При этом над строкой частного произведения и дополнительной строкой должны выполняться одинаковые операции.
30. Вместо дополнительного кода частного произведения с обратным знаком записать в строку матрицы инверсию всех разрядов частного произведения множимого на 1 кроме младшего и в дополнительную строку в колонку второго разряда частного произведения записать инверсию младшего разряда множимого. При этом над строкой частного произведения и дополнительно строкой должны выполняться одинаковые операции.
Пример 4-49. Выполнятся умножение дополнительных кодов множимого X на множитель Y с вычислением всех разрядов дополнительного кода произведения, включая разряд знака и дополнительный старший значащий разряд. Так как количество значащих разрядов в сомножителях , то разрядность произведения .
Во всех вариантах примера выполняется умножение на модуль множителя.
В вариантах A и F умножение на выполняется способом, описанным в разделе 4.4.2.2. Поскольку частные произведения вычитаются.
В вариантах B-E, G-K принято решение о замене операции вычитания строк матрицы сложением, что потребовало изменения знака частных произведений.
В вариантах B и G частные произведения со знаком обратным знаку множимого вычислены по правилу 10.
В вариантах C и H для изменения знака частных произведений применено правило 20. Для этого в строки частных произведений записаны их инверсии и в матрицу введена дополнительная верхняя строка, показанная жирным шрифтом, в которую записаны 1 дополняющие инверсные коды до дополнительного. Фактически в дополнительную строку будет всегда записан код .
В вариантах D, E, I, K для изменения знака частных произведений применено правило 30. Для этого в строки матрицы записаны инверсии всех разрядов частных произведений кроме младшего и введена дополнительная верхняя строка, показанная жирным шрифтом. Содержимое дополнительной строки совпадает с (варианты D и I), если младший разряд множимого 1, иначе оно равно 0 (варианты E и K). Код в верхней строке сдвинут на разряд влево, поскольку 1 должны прибавляться ко вторым разрядам частных произведений.
Пример 4-50 иллюстрирует возможность замены операции сложения операцией вычитания строк матрицы и справедливость правил изменения знака при вычитании строк.
Пример 4-50. Выполнятся умножение в дополнительном коде тем же способом, что и в примере 4-49. Поскольку множитель , частные произведения должны суммироваться (варианты A и F).
В вариантах B-E, G-K принято решение о замене операции сложения строк матрицы вычитанием, что потребовало изменения знака частных произведений.
В вариантах B и G изменение знака выполнено по правилу 10.
В вариантах C, H и D, E, I, K изменение знака выполнено по правилам 20 и 30 соответственно.
Справедливость вычитания дополнительных строк в вариантах C-E и H-K вытекает из отношения .
К омбинированные способы вычисления частного произведения со знаком обратным знаку множимого.
Можно вычислить частное произведение со знаком обратным знаку множимого, применив комбинацию правила 10 с правилами 20 или 30. Для этого достаточно разбить множимое на две группы разрядов старшие и младшие. В одной группе выполнять преобразование по правилу 10, а в другой – по правилу 20 или 30.
Пример 4-51. Вычисляется произведение с обратным знаком множимого X на 1. Для этого множимое разбито на две группы разрядов.
В
A B C D E F
X:
0|1010|0100
0|1010|1000 0|1010|0000 0|1010|0100 0|1010|1000 0|1010|0000
1|0101
1|0101 1|0101 1011 0111 1111
+0
+0
+1 +1 +1 +1 -X:
1|0101|1100
1|0101|1000 1|0110|0000 1|0101|1100 1|0101|1000 1|0110|0000
В вариантах D-F преобразование группы младшей четверки разрядов выполняется по правилу 20, а в старшей группе, включая разряд знака по правилу 10. В старшей группе все разряды инвертируются, если в разрядах младшей группы есть хотя бы одна 1. Если в младшей группе только 0, то в старшей группе инвертируются разряды, у которых справа есть 1.
Разумеется, что могут быть разработано множество иных вариантов комбинированного преобразования.
Не трудно убедиться в том, что все приведенные правила справедливы в случаях, когда операнды равны 0|00…0 и/или 1|00…0.
Вычисление частного произведения со знаком обратным знаку множимого в системе счисления с основанием .
В системе счисления с основанием вычислить частное произведение со знаком обратным знаку множимого можно, приняв за основу один из двух подходов:
– умножить множимое с обратным знаком на цифру множителя, пользуясь обычной таблицей умножения;
– умножить множимое на цифру множителя по специальной таблице умножения.
Каждый подход порождает множество вариантов. Ограничимся рассмотрением лишь некоторых из них, причем для случая, когда значащие разряды операндов не равны 00…0. Предполагается, что знак произведения, дополнительный старший разряд и результат умножения при операндах равных 0|00…0 и/или 1|00…0 вычисляется по отдельным правилам (раздел 4.4.2).
При первом подходе необходимо вычислить дополнительный код множимого с обратным знаком. Для этого можно воспользоваться правилом непосредственного преобразования 40 или правилом 50 или их комбинациями.
Непосредственное изменение знака числа в дополнительном коде в системе счисления с основанием P > 2.
40. Для изменения знака дополнительного кода числа в системе счисления с основанием достаточно копировать цепочку 0 в младших разрядах, а цифры в остальных значащих разрядах заменить обратными и увеличить на 1 обратную цифру в младшем разряде этой группы.
При преобразовании по правилу 40 единица прибавляется всегда к цифре меньшей, чем 9. Поэтому перенос в следующий разряд отсутствует. Можно совместить увеличение цифры на 1 с выполнением операций сложения/вычитания частных произведений.
При умножении дополнительного кода множимого на цифру множителя необходимо расширить код множимого влево цифрой 0, если код знака множимого 0, иначе цифрой 9 (раздел 4.4.2.2).
Учет переносов при умножении множимого на цифру множителя можно совместить с выполнением операций над частными произведениями. Для этого частное произведение представляют в матрице двумя строками.
Пример 4-52. Выполняется умножение десятичных чисел в дополнительном коде при . Код 1|0000 для представления числа не используется. Операнды предварительно проверяются на код 1|0000 и 0|0000, и если хотя бы один из них имеет такой код, результат умножения вычисляется по отдельным правилам (раздел 4.4.2). Поэтому при выполнении собственно умножения операнд не может быть равным 0 или 1|0000.
Р
A B C D E X: 1|8030
д
(-1970) 1|8030
д 0|1970
д 1|0001
д
(-9999) 0|1000
д
(+1000) Y: 1|6976
д
(-3024) 1|6976
д 1|6976
д 1|0020
д
(-9980) 1|0001
д
(-9999) –
999992120 01960 98020 09998
98000 – 99996060 ×
3024 ×
3024 ×
9980 ×
9999 – 0000000 +
0030240 +
0030240 +
0009980 +
9999000 – 994090 +
0320 + 3000 + 0000 +
7000
005957280
д +
00004640 +
99962080 +
00000000 +
99912000
+ 05957280 +
0110 + 1000 +
7776 +
7000 +
0002820 +
9986040 +
0002224 +
9912000
+
0000 +
0000 +
8887 +
7000
+ 000000 +
000000 +
001112 +
912000
+ 0210 +
2000 + 8887 + 7000
+ 03780 +
74060 +
01112 +
12000
005957280
д
194042720
д
099790020
д
190001000
д
+ 05957280 –05957280 +99790020 –
09999000
В варианте A умножение выполняется по правилам, описанным в разделе 4.4.2.2 (пример 4-34). Модуль множителя . Частные произведения вычитаются, поскольку . Значащие разряды отрицательного множимого расширены слева цифрой 9, и умножение дополнительного разряда на разряд выполняется с отбрасыванием цифры переноса.
В вариантах B-E умножение выполнено тем же способом, что и в варианте A, но операция вычитания частного произведения заменена операцией сложения. Для этого знак множимого заменен обратным по правилу 40. Все цифры в коде X, размещенные слева от цепочки нулей, заменены обратными (третья строка сверху), и полученный код расширен влево 0 показанным жирным шрифтом, так как множимое с обратным знаком имеет код знака 0. Прибавление 1 к младшей цифре этой группы совмещено со сложением частных произведений. С этой целью в матрицу частных произведений введена верхняя строка, показанная жирным шрифтом.
Частные произведения представлены в матице двойками строк. Нижняя строка двойки содержит младшие разряды, а верхняя строка – старшие разряды произведения цифры множимого на цифру множителя. Это позволило совместить сложение переносов при умножении множимого на цифру множителя со сложением строк матрицы.
Поскольку младший не равный 0 разряд множимого уменьшен на 1, то частное произведение (сумма двойки строк) уменьшено в соответствующем разряде на цифру множителя. Чтобы компенсировать потерю, в этот разряд верхней строки записана цифра множителя. Поэтому верхняя строка матрицы, выделенная жирным шрифтом, содержит , сдвинутый влево на количество разрядов равное количеству 0 в младших разрядов множимого.
Варианты B-E отличаются лишь значениями операндов.
При замене операции сложения строк матрицы вычитанием вычисление частных произведений со знаком обратным знаку множимого можно выполнять точно так, как это сделано в примере 4-52.
50. Для изменения знака дополнительного кода числа в системе счисления с основанием достаточно заменить значащие цифры обратными и увеличить полученный код на 1 младшего разряда.
При умножении множимого с обратным знаком на цифру множителя можно умножать код множимого с обратными цифрами на цифру множителя и ввести в матрицу частных произведений дополнительную строку, вносящую поправку. В разряд дополнительной строки, совпадающий с младшим разрядом частного произведения, имеющего знак обратный знаку множимого, следует записать цифру множителя, на которую выполнялось умножение. В разряды дополнительной строки, совпадающие с младшими разрядам частных произведений со знаком множимого, следует записать 0.
Операция, выполняемая над дополнительной строкой, должна совпадать с операцией, выполняемой над частными произведениями со знаком обратным знаку множимого.
Пример 4-53. Выполняется умножение тех же чисел, что и в примере 4-52, при тех же условиях и тем же способом, но изменение знака множимого в вариантах B-E выполнено по правилу 50. Для этого значащие цифры множимого заменены обратными.
Множимое расширено на один разряд слева в зависимости от знака цифрой 0 или 9, показанной жирным шрифтом.
Ч
A B C D E
X: 1|8030
д
(-1970) 1|8030
д 0|1970
д 1|0001
д
(-9999) 0|1000
д
(+1000)
Y: 1|6976
д
(-3024) 1|6976
д 1|6976
д 1|0020
д
(-9980) 1|0001
д
(-9999) –
999992120 01969 98029 09998 98999 – 99996060 ×
3024 ×
3024
×
9980 ×
9999 – 0000000 +
3024 +
3024 +
9980 +
9999 – 994090 +
0323 +
3003 +
0000 +
7888
005957280
д +
00004646 +
99962086 +
00000000 +
99912111
+ 005957280 +
0111 +
1001 +
7776 +
7888
+
0002828 +
9986048 +
0002224 +
9912111
+
0000 +
0000 +
8887 +
7888
+ 000000 +
000000 +
001112 +
912111 +
0212 + 2002 + 8887 + 7888
+ 03787 +
74067 +
01112 +
12111
005957280
д
194042720
д
099790020
д
190001000
д –
05957280 +99790020 – 09999000
Поскольку все частные произведения, кроме равных 0, имеют знак обратный знаку множимого, в дополнительной строке код множителя . Если почему-либо, например второе частное произведение нужно вычитать, то знак множимого при умножении на второй разряд изменять не следует, и во второй разряд дополнительной строки должен быть записан 0.
Умножение множимого на цифру множителя по специальной таблице умножения
При , чтобы вычислить строку матрицы с обратными цифрами, можно умножать множимое, расширенное на один старший разряд, на цифру множителя по таблице умножения, в которой цифры произведения заменены обратными. Например, в десятичной системе , , .
Частное произведение можно представлять в матрице двумя строками, например как это сделано в примере 4-53 вариант B. Обратные коды обеих строк нужно увеличить на 1 младшего разряда для получения дополнительного кода частного произведения. Эту операцию можно совместить со сложением строк матрицы, введя строку, содержащую константу, учитывающую 1 прибавляемые к младшим разрядам.
Некоторые дополнительные особенности вычисления определим в процессе рассмотрения следующего примера.
A B
0|799
доп
1|201доп
(-799)
×
8 ×
8
11 11 +
9999422
+ 0000899
99999377 99997391
99993608
доп 00006392
доп
– 0006392 + 0006392
В варианте A множимое 0|0799доп положительное, и вычисляется дополнительный код отрицательного частного произведения. Разряд переноса при умножении отброшен. Обе строки частного произведения расширены влево до требуемого количества разрядов приписыванием цифр обратных 0 показанных жирным шрифтом.
В варианте B множимое 1|9201доп отрицательное и вычисляется дополнительный код положительного частного произведения. Разряд переноса при умножении отброшен. Строка переносов расширена влево 0, а строка младших разрядов произведений расширена цифрами обратными 0.
П
A B C D E F X:
0|799д
(+799) 0|799д
0|799д 0|799д 1|201д
(–799) 1|000
д Y: 1|202
д
(-798) 1|202
д
1|202
д 1|202
д 1|202
д 1|000
д
(–1000) –
00006392 1111 12221 01221 01221
11000 – 0007191 +
99993607 +
9999422 +
9999422 +
0000899 +
0000000 – 005593 +
9992808 +
99999377 +
99999377 +
99997391 +
00000000 – 00000 +
994406 +
999311 +
999311 +
000899 +
000000
99362398д +
99999 +
9999688 +
9999688 +
9998190 +
0000000
– 0637602
99362398д +
99533 +
99533 +
00899 +
00000
+
999066 +
999066 +
996592 +
000000
+
9999 +
0000 +
0000 +
0999
+
99999 +
00000 +
00000 +
90999
99362398д 99362398д
00637602д
01000000
(+106)
В варианте A, так как , то частные произведения вычитаются из нуля.
В варианте B цифры в строках заменены обратными и введена строка константы 1111 дополняющая обратные коды частных произведений до дополнительных. Это позволило заменить операцию вычитания частных произведений сложением.
В варианте C частные произведения с обратным знаком вычисляются тем же способом, что и в варианте A примера 4-54. Произведение множимого на 0 представлено обратным кодом (–0). Это приводит к исключению в матрице строк равных 00…0. Константа дополнений содержит 2 в колонках, в которых размещены младшие разряды двух строк.
В варианте D произведение на 0 принято равным (+0), что исключает необходимость дополнять строки частного произведения 1. Поэтому строка дополнения перестала быть константой, и ее значение зависит от наличия строк содержащих код 00…0.
В варианте E частные произведения с обратным знаком вычисляются тем же способом, что и в варианте B примера 4-54. Произведение множимого на 0 представлено обратным кодом (+0).
В варианте F операнды имеют минимальное значение (–103). Умножение выполняется по тем же правилам, что и в варианте E.
Во всех вариантах в произведении разряд знака и дополнительный значащий разряд выделены жирным шрифтом.
Если знак и дополнительный значащий разряд произведения вычислять по отдельным правилам, то две левые колонки во всех матрицах можно сократить. Кроме того, нет необходимости расширять нулем слева, что позволяет сократить нижнюю пару строк в матрице.