
- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Некоторые способы ускорения деления
В примере 4-67 рис.4-9 применен прием параллельного выполнения операций сравнения и вычитания (сложения). Если принять, что операция сравнения проще вычитания (сложения) и выполняется быстрее, то каждый раз, когда можно одновременно записывать и выполнять сдвиг делимого, не дожидаясь завершения операции вычитания (сложения). При выполнении операции вычитания (сложения) не вычисляются разряды знака, старший значащий разряд разности и заем (перенос) в старший значащий разряд. Тем самым упрощается и ускоряется ее выполнение. Кроме того, при совмещено вычисление нового остатка и его сдвиг влево, что также ускоряет процесс деления.
Если первая цифра
частного
,
то
и
.
В этом случае можно в первом шаге записать
искомый результат и завершить деление.
Если
вначале
,
то
.
Поэтому, введя “четвертого работника”
проверяющего
на ноль,
можно при
,
не дожидаясь результатов сравнения и
вычитания, записывать
и одновременно сдвигать делимое влево.
Эти действия можно повторять, записывая
очередные разряды частного равные нулю,
до тех пор, пока
.
Всегда, когда
очередной остаток в
старших значащих разрядах содержит
нули, можно в очередные цифры частного
записать
нулей и сдвинуть остаток на
разрядов влево.
Если ввести контроль значения расширенного делимого на ноль, то при обнаружении ситуации можно прекратить деление и приписать справа к вычисленным разрядам частного недостающие разряды равные нулю.
М
ожно
исключить операцию сравнения и судить
о значении
по знаку разности
.
Если знак разности (+), то
.
При знаке разности (–) следует выполнять
сдвиг делимого влево, а при знаке (+)
выполнять сдвиг делимого влево с заменой
старших разрядов делимого значащими
разрядами разности. Это приведет к
некоторому усложнению операции вычитания
и к замедлению деления.
Если очередной остаток и делитель имеют одинаковых цифр в старших разрядах, то остаток и делитель очень близкие друг к другу, и разрядов частного равны 1. Это позволяет ускорить вычисление цифр частного, вычислив последний остаток.
Подробнее способы ускорения операции деления описаны, например, в [3].
Операция сравнение
Сравниваются
числа, представленные в одинаковых или
в разных форматах. Сравнения должны
игнорировать знак нуля, т.е.
.
Результат сравнения всегда точен.
Возможны четыре взаимно исключающих
отношения между операндами: меньше
чем (<),
равно (=),
больше чем (>)
и несравнимые
(unordered)
(?). Последний вариант возможен, когда
один или оба операнда не являются
числами. Это может иметь место, например,
если операнд представлен в дополнительном
коде и код 100...0
не используется для представления числа
(раздел 3.2).
Система может выполнять единственную операцию «Сравнение». В этом случае, получив операнды, система выдает результат в виде четырехразрядного двоичного кода, каждый бит которого содержит значение (true или false) одного из четырех упомянутых отношений между операндами.
Система может
выполнять множество операций сравнения,
содержащих информацию о варианте
отношения, например (),
и выдавать значение (true
или false)
результата сравнения как ответ на вопрос
.
Стандарт IEEE 754 предусматривает 26 вариантов таких операций применимых и к случаю представления числа в форматах с фиксированной точкой, в том числе, например NOT(<). При этой операции результат будет true, если первый операнд больше или равен второму операнду или, если один или оба операнда несравнимые.
Правила сравнения чисел зависят от вида вычисляемого отношения, системы счисления и кода, в котором представлены операнды. Но даже при данном отношении и коде существует множество эквивалентных правил позволяющих вычислять результат.
Следует различать сравнение значений чисел и сравнение кодов чисел. Например, при сравнении кодов на равенство можно получить результат false, при этом значение чисел представленных этими кодами могут быть равными. Кроме того, необходимо учитывать, что некоторым кодам могут соответствовать не числа.
Рассмотрим некоторые способы сравнения чисел представленных их кодами.
Вариант 1. Так как разность чисел с равным количественным эквивалентом равна нулю, то для сравнения чисел X и Y можно выполнить вычитание второго операнда из первого по правилу вычитания чисел в том коде, в котором представлены операнды, и проверить разность на ноль. Следует учитывать, что результат вычитания представлен в том коде, в котором выполнялось вычитание, и что он может быть переполнен.
Если переполнения
разности нет и она равна нулю, то результат
сравнения:
;
;
.
Если переполнения
разности нет и она не равна нулю, то
результат сравнения:
.
Если
,
то
,
иначе
,
.
При проверке разности на ноль следует
в прямом коде проверять только значащие разряды на ноль;
в дополнительном коде проверять все разряды на ноль;
в обратном коде проверять, равны ли все разряды 000…0 или 111…1.
Если переполнение
разности случилось, то операнды имеют
разные знаки и разность не равна нулю.
Знак разности равен знаку первого
операнда. Поэтому:
.
Если
,
то
,
иначе
,
.
Этот способ сравнения сложнее операции вычитания и возможно потребует больших затрат времени. Поэтому применяют иные способы сравнения.
Вариант 2. В основу способа положен принцип просмотра разрядов операндов слева направо.
Пусть операнды даны в прямом коде.
Если знаки операндов не совпадают, то проверим значащие разряды на ноль. Если оба операнда равны нулю, то , , иначе и, если , то , иначе , .
Если знаки операндов совпадают, сравним старшие значащие разряды. Если цифры в старших значащих разрядах совпадают, сравним очередную пару разрядов. Если очередная пара совпадает, продолжим сравнивать пары последующих разрядов вплоть до младших.
Если цифры во всех парах разрядов совпадают, то , , .
Если найдена пара разрядов с неравными цифрами, то .
Если знак операндов (+) и цифра в разряде X больше цифры в разряде Y, то , . Если цифра в X меньше цифры в Y, то , .
Если знак операндов (–) и цифра в разряде X больше цифры в разряде Y, то , . Если цифра в X меньше цифры в Y, то , .
Пусть операнды даны в дополнительном коде.
Инвертируем коды знаков и выполним процедуру просмотра пар разрядов слева направо, начиная с разряда знака.
Если найдена пара разрядов с неравными цифрами, то . Если цифра в X больше цифры в Y, то , иначе , .
Если цифры во всех парах разрядов совпадают, то , , .
Очевидно, что правила сравнения чисел в дополнительном коде проще, чем в прямом.
Пример 4-71. Выполнено сравнение отрицательных неравных чисел в дополнительном и прямом коде способом, основанным на просмотре разрядов операндов слева направо. Разряды, по значению которых вычислено значение отношения, выделены жирным шрифтом.
A B C D E F X:
11010д
(-6) 11010д
(-6) 01010д
(+10) 11010д
(-6) 10110пр
(-6) 10110пр
(-6) Y:
01000д
(+8) 11011д
(-5) 00111д
(+7) 11111д
(-1) 10101пр
(-5) 11110пр
(-14)
В варианте A после инвертирования кодов знака цифра в знаковом разряде X меньше цифры в знаковом разряде Y. Поэтому , , .
В варианте B
после инвертирования кодов знака цифры
во всех разрядах кроме младшего совпадают.
В младшем разряде цифра в
X
меньше цифры в
Y.
Поэтому
,
,
.
В варианте C несовпадение цифр выявлено в старшем значащем разряде, Поскольку цифра в X больше цифры в Y, то , , .
С уменьшением основания системы счисления при прочих равных условиях длина формата числа возрастает. Соответственно возрастает длина цепочки просматриваемых разрядов. Это может приводить к замедлению процесса сравнения. Чтобы сократить длину просматриваемой цепочки в двоичной системе счисления, представляют числа в двоично-шестнадцатеричной системе счисления и сравнивают четверки разрядов.
Существуют иные способы сравнения, однако большая их часть является модификациями рассмотренных способов путем изменения организации вычислительного процесса. Например, можно организовать просмотр одновременно старшей и младшей группы разрядов. Если все цифры в старшей группе разрядов окажутся попарно равными, то в момент окончания просмотра первой половины разрядов будет готов результат просмотра второй половины разрядов, что вдвое ускорит принятие решения.