
- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Математические основы некоторых способов деления двоичных чисел
Деление действительных чисел можно свести к делению целых. Для этого следует в дробных частях операндов уровнять количество разрядов, приписав, справа к одному из них недостающие нули, и интерпретировать полученные коды как целые.
Например, 101.11001/10.011=10111001/1001100. Поэтому в дальнейшем будем рассматривать способы деления целых.
Пусть делимое
и делитель
двоичные
разрядные целые без знака. Справедливо
отношение
(4-19)
где
– частное
с индексом старшего значащего разряда
не превышающем
;
– остаток от
деления
на
;
– индекс младшего
разряда частного
.
Остаток должен
удовлетворять условию
.
Поскольку частное
,
где
– цифры частного
и
,
то из (4-19) следует
. (4-20)
Из (4-20) следует
(4-21)
где
– промежуточный
остаток
,
причем
.
Из (4-21) получим
(4-22)
Так как члены
выражения (4-22) не меньше нуля и
,
то из
(4-22) следуют правила для вычисления
остатков и значений разрядов частного,
начиная со старшего разряда
.
Так как индекс
старшего значащего разряда частного
не может превышать
,
примем
.
Тогда
(4-23)
. (4-24)
Выражение (4-23) можно представить в иных формах:
(4-25)
или
(4-26)
Для вычисления
целого частного и остатка следует
принять
.
Если принять
,
то при
будут вычислены
разрядов целой части частного и
разрядов дробной части.
На основании приведенных правил могут быть разработаны различные способы их реализации.
Деление двоичных чисел в прямом коде
Если делимое и/или делитель не являются целыми числами, то их предварительно приводят к целым. Выполняют деление модулей операндов и вычисляют модуль частного и остатка. Знак частного и остатка определяют по правилам, приведенным в разделе 4.5.1.
Пусть делимое
и делитель
прямые коды двоичных целых без знака в
форматах включающих
и
значащих
разрядов
соответственно. Так как
и
,
то
.
Следовательно, индекс старшего значащего
разряда частного не может быть больше
индекса старшего значащего разряда
делимого равного
.
Индекс младшего разряда частного
определяется требуемым числом разрядов
в частном. Так как
,
то формат остатка
должен совпадать с форматом делителя
и содержать
значащих
разрядов.
Разряды частного,
начиная с
до
включительно, вычисляют по выражению
(4-25) или (4-26), а очередные остатки по
(4-24).
Деление с восстановлением остатка
Этот способ деления едва ли используется в современной цифровой аппаратуре. Несмотря на это он описан в учебниках по ЭВМ, даже если раздел арифметики в них является вспомогательным. Такое внимание авторов вызвано с тем, что освоение этого способа позволяет вникнуть в суть выполнения операции деления и быстрее освоить применяемые в практике более сложные способы деления.
Основная идея
способа деления с восстановлением
остатка состоит в следующем. В аппаратуре
исходные данные и промежуточные
результаты хранятся в относительно
дорогостоящих ячейках памяти (в
регистрах), которые целесообразно
экономить. При делении для нахождения
цифры частного
и очередного остатка
в соответствии с (4-25) и (4-24) вычисляют
разность делимого
и сдвинутого делителя
.
Разность
для экономии
памяти записывают на место делимого
,
стирая последнее. По знаку разности
судят о значении цифры частного (4-24).
Из (4-24) следует,
что сохраненная разность является
очередным остатком
при условии, что ее знак (+) и
.
В этом случае для вычисления очередной
цифры частного
и остатка
следует повторить операцию вычитания,
сдвинув предварительно делитель на
разряд вправо или остаток
на разряд влево.
Если сохраненная
разность имеет знак (–) и
,
то она не является остатком
.
Остаток
.
Но значение
утеряно; на
его месте записана разность
.
Для восстановления утерянного остатка
достаточно к разности
прибавить
.
После восстановления остатка
деление можно продолжить.
Рассмотрим процедуру деления с восстановлением остатка на примере.
Пример 4-65.
Пусть
;
.
Количество разрядов в делимом
;
в делителе –
.
Индекс старших разрядов частного и
делимого
.
Вычислим разряды частного
от
до
.
Тогда
;
;
начальное значение остатка
.
Чтобы
при
в выражении (4-25) вычислить
разность
,
сместим Y
на 4 разряда влево и тем самым совместим
младший разряд
со старшим разрядом
в одной позиции. Кроме того, расширим
код
слева на
позиции и запишем в них нули, как показано
на рис.4-7.
Т
ак
как младшие 4 разряда сдвинутого
равны нулю, то они могут не участвовать
в операции вычитания и поэтому на рис.4-7
заданы по умолчанию. Фактически
выполняется вычитание делителя из
старших разрядов расширенного делимого,
т.е. из
.
Знак разности
,
показан на рис.4-7 жирным шрифтом.
В соответствии с
(4-25) инверсию знака разности записывают
в старший разряд частного
.
Разряды разности
записывают на место
.
Теперь на месте
будет записан код 11001011.
Но он, к сожалению, не является остатком
.
Для восстановления
очередного остатка вычисляют сумму
и записывают восстановленный остаток
на место
.
Сдвигают остаток на разряд влево, что равносильно сдвигу делителя на разряд вправо, и вычитают делитель точно так, как это делали, вычисляя разность .
Очередная разность
отрицательная. Поэтому записывают
и
восстанавливают утерянный остаток
.
Остаток
сдвигают еще на один разряд влево и
снова вычитают делитель. Теперь разность
0001
11.00 положительная и является остатком
,
а
.
Поэтому выполнять восстановление
остатка не нужно.
Последующие действия выполняют по аналогии с предыдущими.
Обратите внимание, что при каждом сдвиге очередного остатка положение точки, отделяющей целую часть остатка от его дробной части и показанной условно на рис.4-7, смещается влево. Это вызвано тем, что сдвиг остатка влево не преследует цель его удвоения, а служит для имитации сдвига делителя вправо для уменьшения последнего вдвое.
При делении целых
с вычислением целого частного и остатка
последняя разность, если она отрицательная,
не является искомым остатком. Поэтому,
если цифра
,
то для нахождения остатка необходимо
выполнить процедуру восстановления
остатка.
В примере рис.4-7
при вычислении
разность
положительная и равна 0010.0000
(повезло). Поэтому остаток 010, а целое
частное 00101.
В примере рис.4-7 вычисление разрядов частного продолжено вплоть до разряда . Кроме того, приведены значения последующих разрядов, чтобы читатель мог самостоятельно, продолжив деление, сверить полученный им результат с правильным.
Разумеется, что
операцию вычитания можно заменить
сложением кода
с дополнением делителя до
.
Вычисление дополнения можно совместить
со сложением путем прибавления к
инверсии делителя и 1 переноса в младший
разряд слагаемых.
Читатель может
поставить вопрос: зачем сдвигать делимое
влево вместо сдвига делителя вправо?
Чтобы сдвигать делитель вправо придется
расширить его формат вправо на
разрядов. Кроме того, вместо вычитания
из
разрядного числа
разрядного, придется выполнять вычитание
из
разрядного числа
разрядное
число. Это очень существенно осложнит
вычисления.
Недостатки способа деления с восстановлением остатка.
В лучшем случае для вычисления одной цифры частного необходимо выполнить два шага (сдвинуть остаток и затем вычесть делитель). Если разность не является остатком необходимо выполнять еще один шаг – восстановить остаток. Это очень сильно замедляет процесс вычисления.
Необходимо выполнять две операции: сложение и вычитание. Если даже заменить операцию вычитания сложением, придется управлять передачей делителя или его дополнения. Это усложняет способ деления и его реализацию.