
- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Деление нормализованных двоичных чисел
Действительное
число, записанное в прямом коде в формате,
включающем
позиций целой части
называют
нормализованным,
если позиция старшего значащего разряда
содержит цифру отличную от нуля. К
нормализованным числам условно относят
число ноль, содержащее во всех значащих
разрядах цифру 0.
Например, десятичные числа в прямом коде 020310; 1143; 05670 и двоичные числа в прямом коде 110100; 011101; 11001 нормализованные, так как цифры в позициях старшего разряда не равны нулю. Десятичные 0020310; 100143; 005670 и двоичные 001011100; 1001110100; 101001 числа не нормализованы, поскольку позиции старшего значащего разряда содержат ноль.
Деление нормализованных
чисел выполняют при делении операндов
в формате с плавающей точкой. Деление
нормализованных чисел можно выполнить
любым рассмотренным выше способом.
Однако поскольку частное
от деления нормализованных чисел не
равных нулю удовлетворяет условию
вычислять разряды целой части частного,
кроме младшего, не имеет смысла. Для
этого достаточно сразу расположить
операнды в исходной позиции в таком
положении, которое они заняли бы при
вычислении младшего разряда целого.
Рассмотрим деление нормализованных чисел на примерах.
Пример 4-70. В вариантах A-D (рис.4-12) используются те же приемы деления, что и в примерах 4-67, 4-68, 4-65, 4-66 соответственно.
В варианте A в исходном состоянии делимое 1101 расширяют на один разряд, приписывая нуль слева, и размещают младшие разряды делимого и делителя в одной позиции. В дальнейшем остатки, сдвинутые на разряд влево с занесением нуля справа (удвоенные), записывают на место делимого, а результаты сравнения фиксируют в частном.
Так как в первом
шаге делимое оказалось больше делителя
разряд целого в частном 1, а остаток
равен их разности 00010. Удвоенный остаток,
записанный на место делимого 00100. Так
как вычисленный удвоенный остаток
меньше делителя новый результат сравнения
,
а новый удвоенный остаток 00100 равен
предыдущему остатку 00010, сдвинутому на
разряд влево.
Если предыдущий удвоенный остаток больше делителя, в частное заносят 1, а на место делимого записывают удвоенную разность предыдущего остатка и делителя. В противном случае в частное записывают 0, а предыдущий остаток сдвигают влево.
Если старший разряд удвоенного остатка 1, можно не выполнять сравнение, так как его результат очевиден. Нет необходимости вычислять старший разряд разности и перенос в старший разряд, так как при записи удвоенного остатка они будут отброшены. Это не приведет к ошибке, поскольку остаток не может превышать делитель.
В варианте B каждый очередной разряд частного и остаток вычисляет очередной работник (вычислитель) предназначенный специально для этой цели. Вычисленный остаток он передает последующему вычислителю.
Первый вычислитель отличается от остальных. Он игнорирует при сравнении и вычитании зачеркнутые в примере старшие разряды делимого и делителя, так как нормализованные операнды всегда содержат в старшем разряде 1, и поэтому результаты сравнения и вычитания от них не зависят. Первый вычислитель передает второму вычислителю при делимое, включая старший зачеркнутый разряд, или при разность делимого и делителя, т.е. остаток. Передаваемая разность всегда содержит в старшем разряде 0. Поэтому вычисляют только остальные разряды разности, приписывая к ним слева 0.
Второй и последующие вычислители идентичны. Они смещают делитель на разряд вправо относительно полученного остатка, выполняют их сравнение и вычитание и передают очередному вычислителю новый остаток.
Конструктор вычислителя, должен учитывать, что младший разряд уменьшаемого и старший разряд вычитаемого всегда равны нулю (поэтому в примере B они заданы по умолчанию). Так как вычисляемый остаток не может быть больше делителя, то при вычитании можно игнорировать старший разряд операндов и не вычислять заем в старший разряд. По этой же причине при нет надобности пересылать последующему вычислителю старший разряд предыдущего остатка. Если старший разряд полученного остатка 1, то сравнение остальных разрядов можно не выполнять, так как результат сравнения очевиден.
Последний вычислитель должен выполнять только сравнение, так как очередной остаток не нужен.
В варианте C выполняется деление с восстановлением остатка и с сохранением его на месте делимого. Делимое расширяется на разряд влево с занесением 0. Это необходимо сделать, чтобы образовать позицию для записи на место делимого удвоенного остатка иногда содержащего в этом разряде 1.
В примере в каждом шаге вычисляют разность удвоенного остатка (в первом шаге его роль исполняет делимое) и делителя. Разность записывают на место предыдущего остатка, а инверсию ее знака (в примере знак выделен жирным шрифтом) – в разряд частного. Предыдущий остаток стирается.
Если знак разности 0, то она является остатком, и для получения нового удвоенного остатка последний сдвигают на разряд влево
Если знак разности 1, то она не является остатком. Для получения нового остатка нужно восстановить потерянный остаток. Для восстановления остатка к разности прибавляют делитель и записывают полученный старый остаток на место разности. Затем остаток сдвигают влево для его удвоения.
В варианте D выполняется деление способом без восстановления остатка и с сохранением удвоенной разности на месте делимого.
В исходном состоянии делимое расширено нулем в старшем разряде.
Из предыдущей удвоенной разности (в первом шаге ее роль исполняет делимое) вычитают делитель, если ее знак 0, или к предыдущей удвоенной разности прибавляют делитель, если ее знак 1. Результат вычитания (сложения) записывают на место предыдущей разности со сдвигом на разряд влево. При записи инверсию знака (в примере знак выделен жирным шрифтом) сохраняют в частном, а значащие разряды, дополненные нулем справа – на месте делимого. Таким образом, о знаке предыдущей разности судят по значению последней вычисленной цифре частного. В исходном состоянии ее принимают равной 1.
Операции вычитания делителя можно заменить операциями сложения с дополнением делителя.