Сложение (вычитание) двоичных чисел с плавающей запятой
Выше уже отмечалось, что при вычислительных операциях с плавающей запятой двоичные числа представляются в виде мантиссы с ее знаком, которая по модулю строго меньше единицы, и порядка с его знаком, который может быть равен нулю или любому (в пределах отведенного числа разрядов) целому числу, т.е. .
Операция сложения (вычитания) чисел с плавающей запятой производится следующим образом.
Первоначально уравнивают порядки слагаемых, для того чтобы привести в соответствие весовые коэффициенты одноименных разрядов мантисс слагаемых. Для этого меньший порядок слагаемого увеличивают до значения, равного большему порядку, а мантиссу этого слагаемого денормализуют, т.е. сдвигают вправо на число разрядов, равное разности между большим и меньшим порядками слагаемых.
Затем мантиссы обоих слагаемых переводят в модифицированный обратный или в модифицированный дополнительный код с учетом их знаков и складывают в соответствующем коде по рассмотренным выше правилам сложения чисел с фиксированной запятой. При этом возможны три случая.
Первый случай. Сложение мантисс слагаемых произошло без переполнения разрядной сетки и нарушения нормализации.
В этом случае результат сложения мантисс переводится из модифицированного обратного (дополнительного) кода в прямой код и представляется как мантисса суммы. Порядком суммы при этом является общий после уравнивания порядок слагаемых.
Второй случай. Сложение мантисс слагаемых произошло без переполнения разрядной сетки, но результат после перевода мантиссы суммы в прямой код оказался ненормализованным.
В этом случае производится нормализация результата сложения, т.е. мантисса суммы сдвигается на соответствующее число разрядов влево, а порядок суммы уменьшается на такое же число.
Третий случай. При сложении мантисс слагаемых произошло переполнение разрядной сетки, т.е. в знаковых разрядах мантиссы суммы оказалась комбинация 01 или 10.
В этом случае цифры всех разрядов данной мантиссы суммы, включая знаковые, сдвигаются на один разряд вправо, после чего в старший знаковый разряд заносится цифра, совпадающая с цифрой, оказавшейся в младшем знаковом разряде после сдвига. Полученный таким образом результат переводится в прямой код и представляет собой мантиссу суммы. Порядок же суммы при этом следует увеличить, и он будет на единицу больше значения уравненных порядков слагаемых.
Пример (первый случай).
Слагаемые:
Требуется найти , т.е найти и .
Первый шаг.
Уравнивание порядков слагаемых, т.е. денормализация слагаемого , чтобы его порядок стал равен + 101.
После уравнивания .
Второй шаг.
Перевод мантисс обоих слагаемых в модифицированный обратный код
Третий шаг.
Сложение мантисс
|
|
.
Четвертый шаг.
Перевод мантиссы суммы в прямой код .
Результат операции сложения .
Пример (второй случай).
Слагаемые:
Требуется найти , т.е найти и .
Будем производить вычисление в модифицированном обратном коде.
Уравнение порядков в данном примере не требуется.
Первый шаг.
Перевод мантисс слагаемых в модифицированный обратный код
Второй шаг.
Сложение мантисс слагаемых
Третий шаг.
Перевод мантиссы суммы в прямой код
.
Произошла денормализация вправо на три разряда.
Четвертый шаг.
Устранение денормализации путем сдвига прямого кода мантиссы суммы на три разряда влево и вычитания из первоначального порядка суммы трех единиц. Вычитание производится в модифицированном дополнительном или в модифицированном обратном коде
Результат операции сложения
Пример (третий случай).
Слагаемые:
Требуется найти , т.е найти и .
Будем производить вычисления в модифицированном обратном коде.
Первый шаг.
Уравнение порядков слагаемых
.
Второй шаг.
Перевод мантисс слагаемых в модифицированный обратный код
Третий шаг.
Сложение мантисс слагаемых
|
|
10,111011110
Произошло переполнение разрядной сетки (денормализация влево), т.к. в знаковых разрядах мантиссы суммы оказались разные знаки.
Четвертый шаг.
Устранение переполнения (нормализация) путем сдвига мантиссы суммы на один разряд вправо и прибавления единицы к первоначально полученному порядку суммы в модифицированном дополнительном или в модифицированном обратном коде.
Пятый шаг.
Перевод мантиссы суммы в прямой код
Результат операции сложения