- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Деление без записи очередного остатка на место предыдущего
Способ деления без записи очередного остатка на место предыдущего с вычислением разряда частного подобный изложенному в разделе 4.5.2.3.
Рассмотрим способ деления на примере.
Пример 4-68. Здесь (рис.4-10) операнды те же, что и в примере 4-67.
В первом шаге
выполняют сравнение старшего разряда
делимого с делителем и вычисляют их
разность. Сравнивают одноразрядный код
с
разрядным, и вычисляют только один
младший разряд разности. Исполнителю
последующего шага передают при
один разряд разности или при
старший разряд делимого
.
Результат сравнения – цифра старшего
разряда
частного.
Цифра
только при условии
и
.
Во втором шаге к
переданному коду приписывают очередной
разряд делимого
,
сравнивают полученный двухразрядный
код с
разрядным делителем и вычисляют два
младших разряда их разности. Результат
сравнения – цифра
разряда
частного.
Передают исполнителю последующего шага
при
два разряда разности или при
полученный ранее двухразрядный код
старших разрядов предыдущего остатка.
В каждом очередном шаге вплоть до шага к переданному коду приписывают очередной разряд делимого. В последующих шагах приписывают 0. В примере рис.4-10 эти нули заменены пробелами.
Разрядность пересылаемого кода и вычисляемой разности увеличивают на 1 до тех пор, пока их разрядность не стала равной . В последующих шагах их разрядность сохраняют равной и выполняют сравнение и вычитание разрядного кода с разрядным.
В
шаге
и в последующих шагах уменьшаемое всегда
содержит 0 в младшем разряде, что позволяет
несколько упростить выполнение операций
сравнения и вычитания.
При делении целых с вычислением целого частного остаток содержится в старших разрядах последнего пересылаемого кода. В примере рис.4-10 он выделен жирным шрифтом.
Возможны модификации этого способа деления направленные на сокращение затрат. В частности, допустимо выполнять вычитание без вычисления знака разности и с ошибкой, если уменьшаемое меньше вычитаемого. Варианты модификаций зависят от того, в чем состоит задача выполнения операции деления.
Деление без записи очередного остатка на место предыдущего с вычислением разряда частного в соответствии с (4-25).
Этот способ деления
отличается от предыдущего тем, что
значение
определяют по знаку разности
.
Сравнение
не выполняют.
Для этого вычисляют
младшие разряды разности необходимые
для формирования остатка и заем из
разряда определяющий ее знак.
Трудоемкость вычисления разности в этом случае больше, чем в примере 4-68 рис.4-10.
Возможны модификации этого способа деления направленные на сокращение затрат.
Попробуйте самостоятельно выполнить деление этим способом при тех же операндах, что и в примере 4-68.
Деление двоичных чисел в дополнительном коде
Если операнды представлены в дополнительном коде, можно преобразовать их в прямой код, затем выполнить деление в прямом коде и, если частное должно быть представлено в дополнительном коде, преобразовать прямой код частного в дополнительный. Процедуры преобразования кодов замедляют процесс деления. Поэтому применяют способы деления без промежуточного преобразования операндов в прямой код.
Очевидно, что знак частного равен результату сложения по модулю 2 знаковых разрядов операндов. В основу способов вычисления значащих разрядов частного, когда операнды представлены в дополнительном коде, можно положить рассмотренные способы деления в прямых кодах, внеся в них необходимые изменения. Особенности деления операндов в дополнительных кодах рассмотрим на примере способа деления с вычислением очередного сдвинутого влево остатка (раздел 4.5.2.3).
Пусть и – количество значащих разрядов в форматах делителя и делимого.
Формат делимого
со знаком расширяют влево на
разрядов, копируя знаковый разряд в
дополнительные разряды делимого, чтобы
не изменить его количественный эквивалент.
Делитель со знаком смещают влево на
разряд, чтобы совместить младший разряд
делителя со старшим значащим разрядом
формата делимого до его расширения, как
это показано в последующем примере
4-69. Различие в начальном размещении
операндов в примере 4-69 и в его прототипе
(пример 4-67, рис.4-9) обусловлено тем, что
в прототипе выполняется деление целых
без знака, а в примере 4-69 операнды целые
со знаком.
При делении в прямых кодах для нахождения очередной цифры частного сравнивали код старших разрядов расширенного делимого с делителем . При делении в дополнительном коде можно поступать аналогично. Остается лишь открытым вопрос о том, как выполнять сравнение чисел, если они представлены в дополнительном коде со знаком.
Для сравнения
можно применить оператор
подобно тому, как в примере 4-67 применяли
оператор
,
или руководствоваться следующими
правилами.
Если знаки чисел
и
совпадают, то
,
если знак разности
совпадает со знаком
или
.
Например:
;
;
;
;
;
.
Если знаки чисел
и
не совпадают, то
,
если знак суммы
совпадает со знаком
или
.
Например:
;
;
;
;
;
.
При вычислении прямого кода частного цифра частного равна значению отношения .
При вычислении обратного кода частного цифра частного равна значению
,
если знак частного (+);
инверсии , если знак частного (–).14
Для нахождения дополнительного кода частного вначале вычисляют прямой или обратный код частного и затем преобразуют полученный код в дополнительный (раздел 3.2). Вычислить сразу дополнительный код отрицательного частного сложно.
При определении очередного остатка следует учитывать, что знак остатка, если он не равен нулю, должен совпадать со знаком делимого. При отрицательном делимом остаток равный 0 имеет знак (+), так как в дополнительном коде (–0) не существует.
Для определения цифры частного и очередного остатка следует:
при совпадении знаков делимого и делителя вычесть из делимого, или из сдвинутого влево на разряд предыдущего остатка, делитель;
при несовпадении знаков делимого и делителя сложить делимое, или сдвинутый влево на разряд предыдущий остаток, с делителем.
Если знак разности (суммы) совпадает со знаком делимого или если разность (сумма) равна нулю, то очередная цифра прямого кода частного 1 иначе 0, и вычисленная разность (сумма) является очередным остатком.
Пример 4-69. Здесь (рис.4-11) операнды в дополнительных кодах. Жирным шрифтом выделены знаковые разряды. Вычислен обратный код частного. Знаковый разряд частного определен как сумма по модулю два операндов.
Вычитание (сложение) выполняется в дополнительном коде.
Если разность
(сумма) не является остатком, то предыдущий
остаток сдвигается влево на один разряд.
Если разность (сумма) является остатком,
то в процессе сдвига предыдущего остатка
его старшие разряды замещаются цифрами
разности (суммы) как это показано косыми
линиями. Обратите внимание, что в варианте
B
разность, отмеченная знаком
,
не равна нулю, так как ее младшие разряды
не участвующие в вычитании не равны
нулю. Фактически эта разность имеет
значение 00001.000. В варианте C
разность, отмеченная знаком
,
равна нулю и является остатком, хотя ее
знак не совпадает со знаком делимого.
Вычисление остатка равного нулю позволяет
прекратить процедуру деления, так как
все не вычисленные цифры прямого кода
частного и обратного кода положительного
частного будут равны 0, а обратного кода
отрицательного частного 1. Поэтому в
варианте C
результаты всех последующих вычислений
зачеркнуты.
