- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Запись кода числа в формат с фиксированной точкой
В ЭВМ запись кода числа в формат выполняет система Записи (устройство или программа), которая получает от пользователя (человека, программы или устройства являющегося пользователем) задание на запись включающее код записываемого числа, тип формата, в который должен быть записан исходный код, способ округления числа, указание приемника результата (возможно, его адрес). Пользователями системы Записи являются, например система ввода исходных данных или система, выполняющая арифметические операции.
Система Записи выполняет задание, передает результат по назначению и информирует пользователя о результате своей работы, который не во всех случаях может быть успешным. Причиной неуспешного выполнения задания могут быть особые случаи или, как их называют иначе, исключительные ситуации, возникающие при записи кода числа в формат.
Функции системы записи и исключительные ситуации
При записи кода числа в формат может случиться, что длина поля целого и/или дробной части формата не равна длине цепочки разрядов соответствующей части записываемого кода. Если длины цепочек и полей совпадают, функция системы Записи тривиальна.
При несовпадении длин цепочек и полей система Записи должна принять все возможные меры, чтобы выполнить заказ на запись.
Если длина поля целого и/или дробной части числа в формате результата превышает длину соответствующей цепочки разрядов исходного кода, то система Записи должна расширять цепочку разрядов числа слева и/или справа, приписывая к ней коды дополнительных разрядов такие, чтобы значение числа не изменилось. Для этого достаточно приписывать коды цифр цепочек заданных неявно.
На рис.3-6 приведены
значения цифр в цепочках заданных неявно
десятичных чисел
в прямом a),
обратном b)
и дополнительном кодах c).
Цепочки содержат либо нули, либо цифры
обратные нулю.
При расширении поля целого левая граница исходного кода сдвигается влево, и в формате проявляются цифры левой цепочки заданной по умолчанию. При расширении поля дробной части вправо сдвигается правая граница, и проявляются цифры правой цепочки заданной по умолчанию. Результат записи в расширенный формат прямого, обратного или дополнительного кода (вариант кода B) – код точного числа, так как его значение сохраняется. Исключительные ситуации не складываются.
Пример 3-12. Пусть формат результата состоит из поля знака длиной 1 бит, поля целого длиной 4 позиции и поля дробной части длиной 4 позиции.
В вариантах A-C исходные числа в прямом коде. Поэтому при записи в формат они расширены слева и справа нулями независимо от знака. Приписанные цифры показаны жирным шрифтом.
В вариантах D, E числа положительные в обратном коде. Чтобы значения чисел не изменились, они расширены в полях целой и дробной части нулями.
В
A B C D E
P=10 P=16 P=2 P=10 P=2 До
записи
Xпр:
1|56|021
0|F9|1A
0|101|011
Xобр:
0|56|21
0|011|01 После
зап
Xпр:
1|0056|0210
0|00F9|1A00
0|0101|0110
Xобр:
0|0056|2100
0|0011|0100
F G K L M
P=10 P=10 P=2 P=10 P=2 До
записи
Xдоп:
1|49|97
1|00|00
1|01|101
Xобр:
1|39|978
1|100|100 После
зап
Xдоп:1|9949|9700
1|9900|0000
1|1101|1010
Xобр:
1|9939|9789
1|1100|1001
Если длина хотя бы одного из полей формата результата меньше длины соответствующей цепочки разрядов исходного кода, то для записи кода в формат необходимо укоротить длину цепочки, отбросив «лишние» разряды в целой части слева и в дробной части справа. Это равносильно на рис.3-6 смещению левой границы кода целого вправо и правой границы кода дробной части числа влево. Если отбрасывание разрядов кода не изменяет значение числа, то система должна записать сокращенный код. Число будет представлено в формате результата точно. В противном случае складываются исключительные ситуации.
В прямом, обратном и дополнительном коде (вариант кода B) значение числа сохраняется, если отбрасываемые разряды содержат цифры, совпадающие с цифрами соответствующих цепочек заданных по умолчанию. Например, если принять, что в нижней строке примера 3-12 представлены коды чисел до записи их в формат, а в верхней строке – после записи в формат, то пример 3-12 будет иллюстрировать запись кодов исходных чисел в сокращенный формат точно.
Если сокращается длина поля целого и отбрасывается хотя бы одна цифра кода, не совпадающая с цифрами цепочки заданной по умолчанию слева, то число принадлежит положительной или отрицательной области переполнения формата результата рис.3-5. В этом случае складывается исключительная ситуация переполнения формата результата
Если отбрасывается хотя бы одна цифра в дробной части кода, не совпадающая с цифрами цепочки заданной по умолчанию, то система Записи округляет число в заданном Заказчиком режиме округления (раздел 3.3.2). При округлении значение числа увеличивается или уменьшается до одного из двух ближайших чисел, представимых в формате с сокращенной длиной поля дробной части. Число теряет точность, и складывается исключительная ситуация потери точности.
Округление может быть причиной исключительных ситуаций переполнение, машинного нуля и потери значимости, если исходное число расположено на числовой оси вблизи верхних или нижних границ диапазона чисел представляемых в формате результата или вблизи границ областей растянутой потери значимости рис.3-5. При округлении число на числовой оси смещается вправо или влево. Если оно расположено вблизи границы, возможен переход числа через границу из одной области в другую. Поэтому проявлять тройку перечисленных исключительных ситуаций следует для кода округленного, а не исходного числа. Однако это можно делать, анализируя код исходного, а не округленного числа. Такой подход позволяет проявить исключительные ситуации до получения результата округления, сохранять исходный код для доступа к нему обработчика прерывания или записывать иной код в формат результата в случае, если прерывание по сложившейся исключительной ситуации заблокировано Заказчиком на запись. Особенности округления кодов действительных чисел и запись округленного кода в формат результата с проявлением исключительных ситуаций по значению исходного кода рассматриваются в разделе 3.3.3.
Если складывается исключительная ситуация, система устанавливает флажок этой исключительной ситуации в 1, иначе в 0. Флажок это бит в слове признаков исключительных ситуаций. Флажки доступны Заказчику для чтения и для записи. Если исключительные ситуации не складываются, система устанавливает все флажки в 0 и успешно завершает свою работу, отправив результат по назначению.
Если сложились исключительные ситуации, система формирует сигнал прерывания, но только если Заказчик не заблокировал прерывание по всем сложившимся ситуациям. Для блокирования или разрешения прерывания Заказчик передает системе Записи в составе исходных данных слово блокирования прерываний. Каждый бит этого слова соответствует определенному флажку исключительной ситуации. Сигнал прерывания будет сформирован, если есть флажок, установленный в 1, и соответствующий ему бит в слове блокирования прерываний содержит 0.
При сигнале прерывания равном 1 система Записи переходит в состояние ожидания. Выполнение текущей программы приостанавливается и инициализируется программа обработки причины прерывания (обработчик прерывания). Обработчику прерывания доступны флажки, исходный код и другая информация. Обработчик прерывания, обычно подпрограмма, принимает предусмотренные в ней меры для предотвращения возможных недопустимых ошибок в последующих вычислениях, вызванных исключительной ситуацией. Не исключено, что обработчик прерывания сам запишет результат в формат и сбросит флажки в 0. В этом случае система Записи продолжит выполнение задания и отправит результат по назначению. Обработчик прерывания может, например, изменить тип формата результата или снять программу пользователя с выполнения, проинформировав о причине такого действия.
Различают системные обработчики прерывания и обработчики прерывания пользователя (созданные автором прикладной программы).
Системные обработчики прерываний создают разработчики вычислительной системы. Их возможности, как правило, ограничены и не во всех случаях удовлетворяют потребности пользователя. Поэтому во многих системах предусматривается возможность создания обработчика прерывания пользователем и средства, позволяющие пользователю в его программе указывать, какой именно обработчик должен функционировать в случае появления исключительной ситуации на данном этапе выполнения программы. Для этого программист должен знать функции, выполняемые системным обработчиком прерывания.
Если прерывание по всем исключительным ситуациям заблокировано система Записи принимает решение самостоятельно. В ситуациях потери точности, потери значимости и машинного нуля система записывает округленный результат в формат. В ситуации переполнения записывает в формат код сообщения (не число, - NaN – Not a Number) или иной код, предусмотренный на этот случай разработчиком системы Записи. Полученный результат отправляет по назначению и завершает свою работу, сохраняя состояние флажков. Программа пользователя переходит к выполнению очередной команды.
Программист может предусмотреть в программе условные переходы по состоянию флажков и передавать управление обработчику прерывания пользователя, или игнорировать исключительные ситуации не выполняя анализ состояния флажков.
Если система Записи проявляет ситуацию потери значимости, то она может не проявлять ситуацию машинного нуля, возлагая эту задачу на программу Обработчика прерывания по потере значимости. Обработчик проявит ситуацию машинный ноль, обнаружив, что число после округления равно нулю.
В конкретной системе функции системы Записи могут несколько иными. Поэтому программисту следует внимательно изучить особенности вычислительной системы, прежде чем приступать к ее программированию.
Одновременно могут быть установлены в 1 флажки переполнения и потери точности.
Флажки переполнения и потери значимости или машинного нуля не могут быть установлены в 1 одновременно.
Если флажок потери значимости или машинного нуля в 1, то и флажок потери точности в 1.
Если флажок машинного нуля в 1, то и флажок потери значимости в 1.
Если формат используется для хранения целых чисел (поле дробной части отсутствует) и система выполняет запись в формат кода целого числа, то ситуации потери точности, значимости и машинного нуля сложиться не могут.
