- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Округление кодов действительных чисел с записью в формат с фиксированной точкой
Следует различать округление числа и округление кода числа. Правила округления числа, и соответствующие им правила округления кода числа не обязательно совпадают. Однако в каком бы коде не было представлено число, результат округления кода должен быть кодом числа округленного заданным методом округления.
Если все сокращаемые разряды дробной части кода содержат цифры, совпадающие с цифрами младших разрядов заданных по умолчанию, то результат округления точный. Система Записи копирует сохраняемые разряды в формат результата. Исключительные ситуации потери точности, потери значимости и машинного нуля не складываются, так как результат округления точный. Если длина поля целого формата результата меньше длины поля целого исходного формата и хотя бы один сокращаемый разряд целого содержит цифру не совпадающую с цифрами старших разрядов заданными по умолчанию, то складывается ситуация переполнения.
Если складывается ситуация потери точности система Записи записывает округленный код в формат результата. При этом могут сложиться исключительные ситуации переполнения, потери значимости и машинного нуля. Правила округления и признаки исключительных ситуаций зависят от заданного Заказчиком на запись метода округления и кода, в котором представлено число.
Округление прямого кода числа
Признак ситуации потери точности – не 0 хотя бы в одном отбрасываемом разряде.
Результат сокращения не равных 0 младших разрядов исходного кода является прямым кодом числа ближайшего к исходному числу и к 0. Прямой код ближайшего числа отстоящего дальше от 0 равен сокращенному исходному коду, значащие разряды которого увеличены на +1 младшего разряда формата результата.
Пример 3-13. Выполнено округление прямого кода чисел к нулю и от нуля с сокращением двух младших разрядов. В вариантах A-Е коды десятичных чисел, а в вариантах F-J – двоичных. Двойки сокращаемых разрядов в исходном коде NT зачеркнуты. Во всех вариантах складывается исключительная ситуация потери точности, так как сокращаемые разряды исходного кода не равны 0.
В строке N1 приведены результаты округления прямого кода NT, смещенные к нулю (рис. 3-7), а в строке N2 – смещенные от нуля относительно точного исходного кода NT.
В двойках вариантов A,B и F,G прямые коды NT отличаются только знаком. Сопоставление кодов результатов округления N1 или N2 показывает, что способы округления к нулю и от нуля прямого кода не зависят от знака исходного кода. Они сводятся к простому отбрасыванию сокращаемых разрядов в коде NT для получения кода результата округления к нулю и к увеличению укороченного кода на +1 при вычислении результата округления от нуля.
В вариантах C и H код N1 – машинный ноль. Знак машинного нуля всегда совпадает со знаком исходного кода. Следовательно, при выборе в качестве результата округления кода числа смещенного к нулю может складываться исключительная ситуация машинный ноль независимо от длины поля целого в формате результата. Ее признак – наличие нулей во всех сохраняемых разрядах исходного кода в ситуации потери точности. Если складывается ситуация машинный ноль, то складывается ситуация потери значимости, так как старший разряд в формате результата 0, и точность округленного числа меньше точности формата.
В
A B С D E NT:
0|754|99 N1:
0|754|99 1|754|99 1|000|00 0|009|99 1|999|99
+
1 +
1 +
1 +
1 +
1 N2:
0|765|00 1|765|00 1|000|01 0|010|00 1|1000|00
F G H I J NT:
0|101|11 N1:
0|101|11 1|101|11 1|000|00 0|001|11 1|111|11
+
1 +
1
+
1 +
1 +
1 N2:
0|110|00 1|101|00 1|000|01 0|010|00 1|1000|0028 1|754|9928 1|000|0051 0|009|9928 1|999|9928
01 1|101|1101 1|000|0001 0|001|1101 1|111|1101
Варианты D и I иллюстрируют, что количество значащих разрядов в коде округленного числа зависит от выбранного метода округления. В N1 значащих разрядов 3, а в N2 – 4. При записи в формат результата с двумя позициями в поле целого кода N1 сложится исключительная ситуация потери значимости, а при записи в этот же формат кода N2 – она не сложится. При записи в формат с одной позицией поля целого кода N1 исключительная ситуация переполнения не сложится, а при записи в него кода N2 она не сложится.
В вариантах E и J количество значащих разрядов в поле целого в коде числа N2 больше на 1 разряд, чем в поле целого формата исходного кода. При записи кода N2 в формат результата с длиной поля целого равной длине поля целого в формате исходного кода сложится исключительная ситуация переполнения формата результата, а при записи его в формат с длиной поля целого большей на одну позицию ситуация потери значимости не сложится.
В вариантах D,I и E,J увеличение количества значащих разрядов в коде N2 вызвано переносом равным 1 из старшего значащего разряда при сложении укороченного исходного кода с +1 и может случиться, только если все значащие цифры в укороченном исходном коде обратные нулю. Увеличение количества значащих разрядов может приводить к переходу округленного числа через границы чисел представимых в формате результата и вызывать ситуацию переполнения формата или, напротив, исключать ситуацию потери значимости.
Если при заданном методе округления из двух ближайших чисел должно быть выбрано ближайшее к нулю, то признаки исключительных ситуаций складывающихся при записи результата округления в формат результата следующие.
Ситуация переполнения может сложиться, если поле целого в формате результата меньше чем в исходном формате. Ее признак – не равенство нулю сокращаемых разрядов целого.
Ситуация потери значимости складывается, если
поле целого в формате результата больше чем в исходном формате;
поля целого в форматах совпадают, и старший разряд в исходном формате содержит 0;
поле целого в формате результата меньше чем в исходном, нет переполнения формата и старший разряд, копируемый в формат результата, содержит 0.
Ситуация машинный ноль может сложиться при любой длине формата результата. Ее признак – наличие нулей во всех разрядах исходного кода кроме разрядов, отбрасываемых при округлении. Машинный ноль имеет знак исходного кода.
Если при заданном методе округления из двух ближайших чисел должно быть выбрано отстоящее дальше от нуля, то код результата округления равен укороченному исходному коду, увеличенному на 1 младшего разряда формата результата. Количество значащих разрядов в округленном коде может стать больше на 1 разряд, чем в укороченном исходном коде. Признак увеличения количества значащих разрядов – цифры обратные нулю в значащих разрядах исходного кода.
Увеличение количества значащих разрядов может стать причиной ситуации переполнения формата результата или исключить ситуацию потери значимости.
Ситуация переполнения может сложиться, если поле целого в формате результата не больше чем в исходном формате. Ее признак – не равенство нулю сокращаемых разрядов целого или наличие цифр обратных нулю во всех разрядах исходного кода копируемых в формат результата.
Ситуация потери значимости складывается, если
поле целого формата результата превышает поле целого исходного формата более чем на 1 разряд;
поле целого формата результата превышает поле целого исходного формата на 1 разряд и в сохраняемых разрядах исходного кода есть цифра не обратная 0;
поле целого в формате результата не больше чем в исходном формате, нет переполнения формата, разряд исходного формата соответствующий старшему разряду формата результата содержит 0 и в остальных сохраняемых разрядах исходного кода есть цифра не обратная 0.
Ситуация машинный ноль сложиться не может.
Признак равно удаленности исходного числа от ближайших чисел в формате результата в прямом коде не зависит от знака числа. Число равно удалено, если количественный эквивалент цифры в старшем отбрасываемом разряде кода равен P/2 и остальные разряды содержат нули. Например, в десятичной системе счисления код в отбрасываемых разрядах 500…0, в двоичной – 100…0.
В прямом коде самым простым является метод округления к нулю, а самым трудоемким – от нуля. При округлении к нулю сокращаемые младшие разряды исходного кода просто отбрасываются, а при округлении от нуля сокращенный исходный код вне зависимости от знака числа необходимо увеличить на 1 младшего разряда.