- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Операции алгебраического деления и вычисления остатка
Различают две операции
деление – вычисление частного, быть может, приближенного (обозначают символами (:) или (/), например частное
или
);
вычисления остатка от деления (обозначают аббревиатурой REM английского слова remainder – остаток). Запись
означает, что
равно остатку от деления делимого
на делитель
.
Значение
всегда точное.
В зависимости от
цели вычислений выполняют одну или
другую операцию, а иногда обе. Например,
если требуется узнать, сколько отрезков
ленты длиной
можно получить из рулона длиной
,
то достаточно выполнить операцию деление
с вычислением целого частного
,
не вычисляя остаток. Однако если нужно
узнать, сколько ленты останется от
рулона длиной
после разрезания его на отрезки длиной
,
то достаточно
выполнить операцию вычисления
остатка от
деления нацело.
Разумеется, что если нужно узнать то и
другое, то придется выполнить обе
операции.
В младших классах средней школы изучают способ деления, который позволяет вычислить частное и остаток. Однако известны иные способы, позволяющие вычислять только частное или только остаток. Некоторые из них находят применение в вычислительной технике.
При делении чисел и вычислении остатка возникают особые случаи (исключительные ситуации)
Деление на ноль;
Невыполнимая операция.
Исключительная
ситуация деление
на ноль
складывается, при вычислении частного,
если
,
.
Частное
и не является конкретной числовой
величиной. Знак бесконечности определяется
суммой по модулю 2 знаков
и
.
Исключительная ситуация невыполнимая операция складывается в трех случаях.
При делении, если и . Результат операции
не является числом.
При вычислении остатка, если
.
Результат операции
при
не является числом.
Один или оба операнда не являются числами.
Поэтому при выполнении операций деления и вычисления остатка всегда выполняют проверку операндов на равенство нулю, и, в случае обнаружения исключительной ситуации, формируют ее признак и сигнал прерывания. Эти действия подобны описанным в разделе 3.3.
При отсутствии обработки исключительной ситуации деление на ноль результату присваивают код нечисловой величины или , конечно при условии, если в формате результата зарезервированы коды для обозначения этих величин. В некоторых системах в исключительной ситуации деление на ноль формируют признак ситуации переполнения разрядной сетки, но это делает две, в общем случае разные, ситуации неразличимыми.
При отсутствии обработки исключительной ситуации невыполнимая операция результату присваивают код нечисловой величины NaN (not a number – не число).
Ниже будем рассматривать вычисление частного и остатка при отсутствии исключительных ситуаций.
В отличие от
умножения, сложения и вычитания в
позиционных системах счисления результат
операции деления (частное) не может быть
представлен в формате конечной длины
в общем случае точно. Например, в
десятичной системе счисления частное
от деления
вычислено точно и может быть представлено
в формате конечной длины, а частное от
деления
содержит 6 в периоде и не может быть
записано точно в формате любой конечной
длины. Если точное значение
нельзя представить в формате, то частное
принимают равным приближенному числу.
Поэтому в общем случае частное
.
Понятие числа приближенного довольно растяжимое. Нет четко установленной границы, позволяющей строго определить, какие числа являются приближенными к данному точному числу, а какие нет.
При делении всегда обеспечивают строгое выполнение равенства
(4-17)
Если частное
,
то остаток
.
Если
,
то
.
Остаток можно интерпретировать как
дополнение до множимого произведения
приближенного частного на множитель.
Знак частного.
Из (4-17) следует, что при
значение
и, следовательно, если знаки
и
совпадают, то знак
должен быть (+). В противном случае знак
должен быть (–). При
и
значение
,
причем знак нуля в
должен определяться по этому же правилу.
Например, при
и
частное
.
Это правило определения знака частного
распространяется на случай, когда
частное не точное и
.
Следовательно, код знака частного можно
вычислить, сложив по модулю 2 коды знаков
операндов.
Из правила определения знака следует, что значения частного приближенные к положительному точному значению не могут быть отрицательными и наоборот. Поэтому при округлении до нуля крохотного значения знак результата равного 0 должен совпадать со знаком .
Остаток.
Так как допускается некоторая свобода
выбора значения
,
то для поддержки отношения (4-17) значение
должно быть вычислено всегда точно. Из
этого следует, что
и
являются взаимно связанными величинами.
Изменение
при неизменных
и
должно приводить к изменению
и напротив, изменяя
,
следует изменить
.
Вычислив частное и выполнив его округление, можно определить остаток по формуле
. (4-18)
Так как результаты операций умножения и вычитания можно всегда вычислить точно, то остаток должен быть найден точный.
Вычисление остатка по выражению (4-18) весьма трудоемко, поскольку необходимо выполнять операцию умножения.
Некоторые способы деления, в том числе изучаемые в средней школе, позволяют по значениям модулей делимого и делителя вычислять модуль частного и модуль остатка. Знак частного определяют по приведенному выше правилу.
Знак остатка можно вычислять по правилам, вытекающим из анализа выражения (4-18).
Знак остатка зависит от того больше или меньше по модулю значение , чем , и от знака .
Если
,
то знак
должен быть равен знаку
.
Если
,
то знак
должен быть обратным знаку
.
Если
,
знак нулевого остатка должен совпадать
со знаком
.
Пример 4-64.
Пусть
.
Тогда точное значение
нельзя записать в формат с конечной
длиной разрядной сетки. Округляя частное
до нуля, до
или до ближайшего числа, можно принять
значение
или
и т.д.. Так как
,
то знак остатка по первому правилу
должен быть (–). Действительно, из (4-18)
следует, что при
значение остатка
,
а при
значение
и т.д.
При тех же исходных
данных, округляя
до
,
получим
или
или
и т.д. Так как
,
то по второму правилу знак остатка
должен быть (+), что подтверждают результаты
вычисления остатка по выражению (4-18).
Пусть
.
Тогда точное значение
и
.
По третьему правилу остаток
.
Обратите внимание, что
при
;
и
округление сколь угодно крошечного
до
со знаком совпадающим со знаком
приведет в соответствии с (4-18) к остатку
со знаком
;
при и значение
и
со знаком, совпадающим со знаком
,
а остаток
со знаком
.
Неравенство остатка нулю при является признаком машинного нуля в частном.
Интерпретации операции деления. Некоторая свобода выбора значения частного в сочетании с запросами практики вычислений позволяют по-разному интерпретировать операцию деления.
В традиционной арифметике все варианты интерпретации обозначают одинаковым знаком (:) или (/) и различают их по контексту в зависимости от цели выполнения операции деления. Так, в примере с делением рулона длиной на отрезки длиной вычисляют целое частное являющееся числом ближайшим меньшим к точному значению , поскольку искомое количество отрезков является целым. Чтобы узнать удельное давление груза массой на площадь основания вычисляют действительное частное с заданной точностью.
В систему команд, выполняемых ЭВМ, вводят множество разных операций деления с разными обозначениями, вычисляющих не совпадающие результаты, быть может, в разных форматах. Программист (человек или транслятор) выбирает из этого множества ту из них, которая необходима при решении его задачи.
В машинной арифметике различают деление
Целых с вычислением целого частного и/или остатка.
Действительных чисел с вычислением целого частного и/или остатка.
Целых и действительных чисел с вычислением действительного частного (в заданном формате с округлением) и/или остатка.
Целых и действительных чисел с вычислением заданного количества значащих разрядов округленного частного и/или остатка.
Возможны иные варианты операций деления.
В системе команд ЭВМ могут отсутствовать некоторые варианты операции деления или даже не быть операции деления вовсе. В этом случае программист реализует процедуру деления программным способом, используя правила вычисления частного определенные машинной арифметикой.
Рассмотрим результаты различных операций деления при отсутствии исключительных ситуаций.
Деление целых с вычислением целого частного и целого остатка.
При любом способе
деления целых с вычислением целого
частного и остатка в любой системе
счисления результаты должны быть точными
и удовлетворять отношениям (4-17) и (4-18)
причем
.
Формат частного
должен быть не меньше формата делимого,
так как при
,
частное
.
Формат остатка не может быть меньше формата делителя, так как модуль остатка может быть меньше модуля делителя всего лишь на 1.
Знак остатка совпадает со знаком делимого.
Действительно,
т.к. знак
равен сумме
по модулю 2 знаковых разрядов
и
,
то при
знак
равен знаку
и
.
Следовательно, при
для вычисления
по (4-17) нужно к положительной величине
прибавлять
положительный остаток. При
знак
обратный знаку
и
.
Так как произведение
,
то для вычисления делимого по (4-17) нужно
к отрицательной величине
прибавлять
отрицательный остаток.
Например,
и
;
и
;
и
;
и
.
Приведенные результаты деления удовлетворяют отношению (4-17).
Деление действительных чисел с вычислением целого частного и остатка.
Частное
должно быть результатом округления
до младшего разряда целого в заданном
режиме округления (раздел 3.3.2). При
округлении частного до ближайшего
целого в случае, когда
,
то
– четное.
Остаток
должен удовлетворять отношению (4-18),
причем
.
Знак остатка не обязательно совпадает
со знаком делимого. Если
,
то знак
должен совпадать со знаком делимого.
Остаток всегда точный.
Например,
и
;
и
.
Частное
,
так как точное частное +5,5 равноудалено
от +5 и +6, то выбрано четное частное +6.
Остаток
.
Частное
,
а остаток
;
так как в этом случае знак остатка должен
совпадать со знаком делимого.
Деление целых и действительных чисел с вычислением заданного количества значащих разрядов частного с округлением.
Результатом
являются значения заданного количества
старших значащих разрядов частного,
начиная с первого разряда слева не
равного нулю, и индекс
младшего значащего разряда. Частное
округляется до младшего вычисленного
разряда по одному из правил приведенных
в разделе 3.3.2.
Формат частного включает разряд знака и значащих разрядов. Формат – целого со знаком, выбирают исходя из предельных значений индекса младшего разряда частного при заданных форматах операндов и значения .
Для правильного округления достаточно вычислить один дополнительный разряд частного и остаток (достаточно выяснить, равен ли остаток нулю). Если остаток равен нулю, то все остальные не вычисленные разряды частного равны нулю. В противном случае хотя бы еще один дополнительный разряд частного равен 1. Этой информации достаточно для правильного округления частного во всех возможных режимах округления (раздел 3.3.2).
При
и
следует всем
значащим разрядам частного присвоить
значение 0 с правильным знаком и принять
.
Например. При
результат деления
и последний остаток не равен 0. Сохраняемый
индекс
.
В режиме округления
до
или до нуля
.
Остаток
.
В режиме округления
до
или до ближайшего числа
.
Остаток
.
Результат деления
при
и округлении до ближайшего числа будет
;
и
.
Действительно, частное с дополнительным разрядом равно 0,73545 с остатком равным 0. Так как дополнительный разряд равен половине веса младшего сохраняемого разряда и остаток 0, то последующие не вычисленные разряды частного равны нулю. В этом случае по правилу округления до ближайшего числа результат должен быть четным, т.е. 0,7354. Остаток
.
Деление целых и действительных чисел с вычислением частного в заданном формате.
Формат частного выбирают исходя из следующих рассуждений.
Так как
,
то,
зная
и
,
не трудно найти вес старшего значащего
разряда в формате
.
Количество значащих разрядов в формате выбирают исходя из заданной точности представления или предельно допустимой абсолютной погрешности с учетом возможности округления результата (см. раздел 3.3.2).
Вычисляют все разряды формата частного, один дополнительный разряд и остаток. Дополнительный разряд и остаток используют при округлении, так же как и в предыдущем варианте деления.
В режиме округления до нуля все значащие разряды частного будут вычислены точно, т.е. их значение совпадает со значением этих разрядов при вычислении бесконечно большого количества цифр в частном. Если возникает потребность увеличить точность частного, то для этого нет необходимости выполнять деление заново. Это даже нельзя сделать в случае, если делимое утеряно. Достаточно выполнить деление остатка на делитель и приписать новое частное к предыдущему.
