
- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
Дополнительный код двоичного числа в традиционной системе счисления можно преобразовать в систему счисления с алфавитом простой заменой цифры 1 в знаковом разряде на цифру . Дополнительный код положительных чисел в традиционной системе двоичной системе счисления совпадает с вариантом их записи в системе с симметричным алфавитом.
Например, код 1|1001доп (–7) после замены цифры знака 1001 (–16+8+1= –7). Аналогично, 1|0000доп (–16) равно 0000 (–16). Коды 0|0111д и 0|0000д положительных чисел (+7) и (+0) в системе с алфавитом можно представить как 00111 и 00000.
Выполнив столь элементарное преобразование множителя Y в Z, можно умножать X на Z любым способом, рассмотренным в разделе 4.4.2.4. Более того, нет необходимости выполнять преобразование множителя. Достаточно интерпретировать его знак 1 как .
Пример 4-40.
Код 1|000доп
применяется для кодирования числа
.
Вычисляется
разряд дополнительного кода произведения
двоичных чисел со знаком. Строки матрицы
расширены влево до
разрядов знаками соответствующих
частных произведений. Знаковый разряд
произведения показан жирным шрифтом.
В вариантах A-E
множитель
.
Поэтому цифра 1 в знаковом разряде Y
заменена в коде Z
цифрой
.
В вариантах A-C при умножении X на изменен знак X. Если знак X не изменять, то последнюю строку необходимо вычитать, как это выполнялось в примере 4-36.
A B C D E
X: 1|000
д
(-8) 1|001
д
(-7) 1|010
д
(-6) 0|111
д
(+7) 0|110
д
(+6)
Y: 1|000
д
(-8) 1|000
д
(-8) 1|101
д
(-3) 1|000
д
(-8) 1|101
д
(-3)
Z: +00000000 +00000000 +11111010 X +00000000 +00000110
X +0000000 +0000000 +0000000 +0000000 +0000000 +000000 +000000 +111010
4X +000000 +000110
4X +01000
-8X +00111
-8X +01110
-8X +11001
-8X +11010
-8X
01000000д
(+64)
00111000д
(+56)
00010010д
(+18)
11001000д
(-56) 11101110д
(-18)
F G H I J
X: 1|000
д
(-8) 1|001 д
(-7) 1|010 д
(-6) 0|111 д
(+7) 0|110 д
(+6)
Y: 0|111
д (+7) 0|111
д
(+7) 0|011 д
(+3) 0|111 д
(+7) 0|011 д
(+3)
Z: +11111000 +11111001 +11111010 +00000111 +00000110 +1111000 +1111001 +1111010 +0000111 +0000110 +111000 +111001 +000000 +000111 +000000 +00000 +00000 +00000 +00000 +00000
11001000д
(-56)
11001111д
(-49)
11101110д
(-18)
00110001д
(+49)
00010010д
(+18)
Рассматриваемый способ умножения двоичных чисел в дополнительном коде, фактически аналогичен способу умножения, описанному в разделе 4.4.2.3. Здесь лишь иная его интерпретация.
Преобразование множителя с заменой цепочек единиц нулями
Трудоемкость вычислений уменьшается с увеличением числа строк равных нулю в матрице частных произведений. Чтобы увеличить количество нулевых строк, нужно преобразовывать множитель Y в Z так, чтобы количество нулей в его разрядах возрастало.
Попробуем это
сделать, заменяя каждую цепочку единиц
в Y
цепочкой в Z
вида
с тем же количественным эквивалентом.
Действительно,
замена цепочки ...00111110... в Y
на
в Z
приводит к увеличению количества нулей
в Z
и, как следствие, к уменьшению не нулевых
частных произведений в матрице и не
изменяет количественного эквивалента
Z
и произведения XY.
Если вес младшего разряда содержащего
1 в исходной цепочке
,
то ее количественный эквивалент
,
где
– индекс старшего разряда цепочки
содержащего 1. Количественный эквивалент
цепочки после преобразования:
сохраняется прежним.
Если цепочка
включает знаковый разряд равный 1,
например 1|11100 ..., то после замены получим
(1 слева не приписываем). Количественный
эквивалент исходной цепочки с учетом
отрицательного веса знакового разряда
равен количественному эквиваленту
результата преобразования
.
П
Таблица 4.5
yi
yi-1
zi
Частное произведение
0 0 0
1 1
0 1
1
0
1
1 0
0 X
–X 0
и
цифры в разряде
где
– индекс знакового разряда в Y.
Цифра
.
Например, если
преобразуемый разряд
и его сосед справа
,
то результат преобразования
.
Преобразование можно выполнять последовательно, просматривая разряды кода Y слева направо, или справа налево, или одновременно во всех разрядах.
П
Y=
01111
0011
011
01д
(+7789)
1011110111
010д
(-2118)
10000д
(-16)
011111д
111111д
Длина формата Z должна быть равна длине формата Y. Поэтому при умножении с применением табл.4.5 количество строк в матрице частных произведений должно быть равно длине формата Y, включая его разряд знака как в примере 4-41. Это не исключает возможность сокращения столбцов знака и дополнительного значащего разряда произведения при их вычислении по отдельным правилам.
При умножении код
Z
не фиксируют, а лишь подразумевают.
Если, например цифры множителя
,
то частное произведение равно нулю, так
как
.
При
частное произведение на цифру
равно (–X),
так как
.
При
частное произведение на цифру
равно (X),
так как
.
Умножение дополнительных кодов с применением промежуточного преобразования множителя в двоичный код с алфавитом по правилу табл.4.5 рассмотрим на примерах.
П
A B С D
X:
1|01010 д
(-22) 1|01010
д
(-22) 0|10111
д
(+23) 0|1
0 0 1 0 д
(+18)
Y:
1|01110 д
(-18) 1|01110
д
(-18) 1|00000
д
(-32) 0|1
0 1 0 1 д
(+21)
Z:
100010
100010
000000
010101 000000000000
0000000000
000000000
1111111101100 -X 00000010101 -2X
000010100
-2X
000000000
000000010010 2X 0000000000
00000000
00000000
11111101100
-4X 000000000
0000000
0000000
0000010010 8X 11101010
101010
000000
111101100 -16X 0010101
32X
10100
32X
01001 -32X
00010010
32X 000110001100
(+396)
000110001100
(+396)
110100100000
(-736)
0000101111010
(+378)
(-18)
,
что предопределяет размерность матрицы.
В варианте A
вычисляются
все разряды произведения. Множитель Y
преобразован в Z
в явном виде. Изменение знака множимого
X
при умножении на
частично совмещено со сложением строк
матрицы. Для этого в строки частных
произведений
записаны обратные коды (–X)
и в матрицу введена дополнительная
верхняя строка, показанная жирным
шрифтом, увеличивающая обратные коды
на 1 до дополнительного кода. Знак и
дополнительный старший значащий разряд
результата вычислены при сложении строк
матрицы и показаны жирным шрифтом.
Перенос из знакового разряда не
вычисляется.
Недостаток вычисления по правилам, использованным в варианте A, в том, что необходимо выполнять сложение младших разрядов матрицы. Кроме того, верхняя строка содержит только нули в единственном случае, когда множитель равен 0.
В варианте B значения частных произведений найдены по табл.4.5 без промежуточного преобразования Y в Z (преобразование выполнено неявно). Разряды знака и дополнительный старший значащий разряд результата вычислены по отдельным правилам (раздел 4.4.2), что позволило исключить два левых столбца в матрице.
Чтобы не выполнять сложение в младшем разряде матрицы, применен способ изменения знака дополнительного кода (разделы 3.2.1.3 и 4.2) множимого, при котором инвертируются все разряды X кроме младшего и, если он равен 0, то ко второму разряду прибавляется 1. При этом способе дополнительная строка, показанная жирным шрифтом, отличается от аналогичной строки в варианте A тем, что ее содержимое сдвинуто на разряд влево, но только при младшем разряде множимого равном 0. При младшем разряде равном 1 дополнительная строка содержит только нули, что увеличивает количество дополнительных нулевых строк в среднем вдвое.
В варианте C применен тот же способ формирования матрицы, что и в варианте B, но младший разряд произведения сразу записан в результат. Дополнительная строка содержит только нули, поскольку младший разряд множимого 1. Значение Z приведено лишь для облегчения анализа читателю.
Вариант D иллюстрирует, что при рассматриваемом способе преобразования множителя (табл.4.5), количество нулей в Z и соответственно количество нулевых строк в матрице может уменьшаться, а не увеличиваться.
Существенно, что преобразование множителя Y в Z и запись частных произведений можно выполнять, начиная с любого разряда множителя и в любой последовательности. Ничто не препятствует одновременному и независимому формированию всех частных произведений.
Конечно, можно применить способ изменения знака множимого основанный на непосредственном преобразовании дополнительного кода в прямой и прямого кода в дополнительный. Это позволяет исключить в матрице дополнительную верхнюю строку переносов. Можно вместо изменения знака X при умножении на выполнять вычитание соответствующих строк в матрице частных произведений.
Из всего вышесказанного следует, что существует множество способов умножения дополнительных кодов основанных на преобразовании множителя по табл.4.5. Приведенные примеры иллюстрируют лишь некоторые из них.
Известно множество вариантов организации процесса вычисления произведения, в основу которых положена табл.4.5. Один из них получил распространение в практике проектирования арифметических устройств и известен как алгоритм Бута (Booth) [10].
Однако цель, сформулированная в начале раздела, – выполнить преобразование множителя так, чтобы количество нулевых строк в матрице частных произведений возросло, не достигнута8.
Действительно,
если цепочка содержит только одну
единицу, обрамленную нулями, то такая
единица заменяется двумя единицами
,
и количество нулей в множителе сокращается.
Кроме того, каждый изолированный нуль,
разрывающий цепочку единиц, заменяется
единицей. Это компенсирует выигрыш от
преобразования длинных цепочек единиц.
В предельном случае, если в исходном
представлении множителя единицы
чередуются с нулями, то после преобразования
множитель
будет иметь единицы во всех разрядах.
Действительно: 010101
,
а 1010101
.
Если принять, что все числа, представляемые в исходном формате, равновероятны, то в среднем количество нулей остается равным количеству единиц, и выигрыш в количестве частных произведений равных нулю отсутствует.
Можно устранить выявленные причины отсутствия выигрыша. К этой задаче мы вернемся в разделе 4.4.2.7. В настоящем разделе продолжим исследование полученного результата.
Анализируя цепочки возможных значений Y можно заметить, что в Z
первая справа единица всегда отрицательная ;
цифры 1 и чередуются, в промежутках между ними могут быть нули;
сочетания 11 и
не встречаются.
Эти свойства цепочек Z следуют также из анализа результата преобразования по табл.4.5. Действительно.
Так как
,
то
.
Если
,
то
и т.д. Следовательно, первая единица в
Z
справа будет всегда отрицательной.
Рассмотрим условия
получения сочетания 11 в Z.
Из табл.4.5 следует, что значение
может быть только при
.
Чтобы было
,
необходимо
и
,
но это требование противоречит условию
получения
.
Следовательно, в Z
двойка
отсутствует. По аналогичным причинам
в Z
отсутствует сочетание
.
Выявленные свойства можно использовать при разработке процесса вычисления произведения. Отсутствие в Z сочетаний 11 (3) и (-3) позволяет сформулировать правило умножения на два разряда множителя (раздел 4.4.2.9).