Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СОДЕРЖАНИЕ 3 (2).doc
Скачиваний:
46
Добавлен:
31.08.2019
Размер:
5.65 Mб
Скачать
  1. Операции алгебраического сложения и вычитания

Система арифметических операций, контролируя операнды, может проявить ситуацию невыполнимая операция и выработать сигнал прерывания, если операнд не является числом или значение операнда не определено.

Различают операции сложения/вычитания целых чисел, действительных чисел и комбинации целого и действительного числа.

Результат сложения/вычитания целых чисел должен быть числом целым вычисленным точно. При записи в формат результата точной суммы/разности целых чисел возможна ситуация переполнения формата результата. Исключительные ситуации потери точности и потери значимости сложиться не могут.

Результат сложения/вычитания действительных чисел и комбинации целого и действительного числа является числом действительным. При записи вычисленного точного значения в формат результата может выполняться округление (раздел 3.3.2). Поэтому возможны исключительные ситуации переполнения формата результата, потери точности, потери значимости и переполнения.

Как было отмечено в разделе 3.2, правила выполнения операций алгебраического сложения и вычитания в прямых кодах относительно сложны. Сложение/вычитание в обратном и особенно в дополнительном коде выполняется проще, чем в прямом, поскольку не возникает необходимость в анализе знаков операндов и сравнении их модулей.

Обычно операнды представлены в одинаковых кодах. Если операнды представлены в разных кодах, то конструктор, знакомый с правилами выполнения операции с операндами в одинаковых кодах, может самостоятельно сформулировать правила сложения/вычитания с получением результата в требуемом коде.

Если операнды представлены в разных форматах, то для выполнения операции их форматы расширяют до равных и минимальных. Если поля в форматах операндов не совпадают, то короткое поле расширяют до длинного. Расширяя поле дробной части числа вправо, в дополнительные позиции записывают:

  • в прямом и в дополнительном коде – нули независимо от знака числа;

  • в обратном коде положительного числа – нули, отрицательного числа – цифры обратные нулю.

Расширяя поле целой части числа влево, в дополнительные позиции записывают:

  • в прямом коде – нули независимо от знака числа;

  • в обратном и в дополнительном коде положительного числа – нули, отрицательного числа – цифры обратные нулю.

Ниже рассматриваются правила сложения/вычитания операндов в одинаковых форматах и кодах с получением результата в том же коде, что и код операндов.

Значение точного результата сложения (вычитания) не равное 0 строго определено и не зависит от того, в каком коде выполняется операция. Точный результат равный 0 может быть (+0) или (–0). Знак нуля зависит от того, в каком коде, и по каким правилам выполняется операция. Поскольку в дополнительном коде (варианты B или C) существует только (+0), то результат любой операции равный нулю в этих вариантах кода имеет знак (+). В варианте A дополнительного кода, в обратном и в прямом коде это не так.

Неоднозначность представления нуля в прямом, обратном и дополнительном коде варианта A в сочетании с незнанием программистом ситуаций, при которых образуется нуль с тем или иным знаком, может приводить к ошибкам в результатах выполнения программы. Например, выполняя программирование в ассемблере, программист может организовать ветвление в программе по знаку суммы, не задумавшись над тем, что сумма может быть равной 0. При сумме равной 0 направление перехода зависит от знака нуля. Каков он, зависит от значения слагаемых и кода, в котором выполняется операция.

Настоятельно рекомендую, прежде чем приступать к написанию ответственной программы ознакомиться с особенностями представления нуля в ЭВМ, на которой будет выполняться программа. Перенос ответственного программного обеспечения с ЭВМ одного типа на ЭВМ другого типа должен сопровождаться детальным изучением их различий в выполнении арифметических операций и их совместимости. Не случайно стандарт IEEE 754 строго определяет правила вычисления знака результата равного 0 для двоичных арифметических операций с плавающей точкой.