Пусть

a = ± 0, mа × 2qa, b = ±0, mb х 2qb

два нормализованных двоичных числа и qa ≤ qb (в противном случае мы можем просто поменять их местами).

Результатом их сложения или вычитания будет являться выражение:

с = (0, mа ± 0, mb × 2qb - qa) × 2qa.

Порядок вычислений при этом следующий (алгоритм компьютерного сложения (вычитания) двух вещественных чисел).

  1. Порядки чисел а и b выравниваются по большему из них (в нашем случае это qa). Для этого мантисса числа b сдвигается на qa - qb разрядов вправо (часть значащих цифр при этом может оказаться утерянной), а его порядок становится равным qa.

  2. Выполняется операция сложения (вычитания) над мантиссами с округлением по значению n + 1-ой значащей цифры результата.

  3. Мантисса результата должна быть нормализована (получившийся после нормализации порядок может отличаться от qa как в меньшую, так и в большую сторону).

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

  1. Потеря значащих цифр мантиссы у меньшего из чисел при выравнивании порядков. В худшем случае утерянными оказываются все значащие цифры и а + b = а, что является абсурдным с точки зрения математики, но возможным в компьютерной арифметике с ограниченным числом разрядов. Пример

  2. Потеря крайней справа значащей цифры результата при сложении или вычитании мантисс (при сложении и вычитании двух чисел количество значащих цифр может увеличиться лишь на одну). Это влияет на точность, но не на правильность результата. Пример


  3. Выход за границу допустимого диапазона значения того или иного вещественного типа при нормализации результата. В данном случае получаемый порядок оказывается либо больше максимально возможного значения, либо меньше минимального. Данную ситуацию различные компиляторы и операционные системы обрабатывают по-разному, но чаще всего выполнение программы прерывается с сообщением об ошибке: "арифметическое переполнение". Пример