Числа с плавающей точкой - Арифметика

Порядок машинного выполнения операций над числами с плавающей точкой мало чем отличается от порядка ручного выполнения этих операций. Единственным серьезным отличием является то, что числа, представленные в машине, имеют фиксированную длину. Описываемые ниже алгоритмы применимы ко всем видам внутреннего представления чисел с плавающей точкой.

Непосредственному выполнению сложения и вычитания предшествует так называемая предварительная нормализация. При этом сравниваются характеристики операндов. Если они равны между собой, то производится сложение или вычитание мантисс в зависимости от выполняемой операции и содержимого знаковых разрядов операндов. Если же характеристики различны, то происходит их выравнивание. Меньший порядок увеличивается до значения большего, и одновременно происходит сдвиг мантиссы соответствующего числа с меньшим порядком. Увеличению порядка на 1 соответствует сдвиг мантиссы вправо на 4 разряда. При этом последняя выдвинутая за пределы разрядной сетки шестнадцатеричная цифра сохраняется. Процесс продолжается до тех пор, пока значения характеристик не совпадут. После этого выполняется сложение или вычитание мантисс.

Мы можем потребовать, чтобы результат сложения или вычитания нормализовался или не нормализовался. При нормализации результата сохраненная шестнадцатеричная цифра перемещается в младшие разряды мантиссы. Таким образом, достигается несколько большая точность, чем та, которая гарантируется использованием короткого, длинного или расширенного форматов соответственно.

Вычислим, например, сумму двух коротких чисел с плавающей точкой.

Значения характеристик обоих чисел совпадают и равны ЗВ1в. Следовательно, предварительную нормализацию в данном случае выполнять не нужно. Первоначально дополнительные младшие разряды обоих чисел содержали нули. Поскольку преднормализация, а следовательно, и сдвиги мантисс не выполняются, то перед непосредственным началом сложения в этих разрядах также будут нули. Второе число является отрицательным, поэтому его мантисса вычитается из мантиссы первого числа. Нормализованная сумма выглядит так:

 Сложение

4381СА38 + 46В22С21

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

В результате сразу же получится нормализованное число

При умножении также производится предварительная нормализация операндов. Значение характеристики произведения равно сумме значений характеристик сомножителей минус 4016. Производится умножение мантисс, и при необходимости результат нормализуется. Вычислим, например, произведение

    45300000

X 4С042А31

Второй сомножитель не нормализован, поэтому его мантисса сдвигается на один разряд влево и одновременно значение характеристики уменьшается на 1. Значение характеристики произведения

    45300000

X 4В42А310

вычисляется следующим образом:

45+4В—40=50

Произведение мантисс равно

300000 х 42АЗ10=ОС7Е93000000

Итак, предварительно результат записывается в виде

Нормализация дает

4FC7E930

В данном случае первая, выходящая за пределы разрядной сетки, цифра произведения есть 0. Если бы это было не так, то она добавлялась бы к значению произведения для повышения точности вычислений. В данном случае дополнительная цифра есть 0, поскольку один из операндов оказался нормализованным.

Деление чисел с плавающей точкой также начинается с нормализации. Значение характеристики делителя вычитается из значения характеристики делимого и к результату добавляется 4010:

характеристика частного = характеристика делимого — характеристика делителя + 4016

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

Разделим, используя арифметику с плавающей точкой, 0.3x162 на 0.9Х163. Иначе говоря, требуется вычислить частное:

  42300000

?43900000

Характеристика частного вычисляется следующим образом:

42—43 +40 =82—43 = 3F

что соответствует порядку —1. Результатом деления мантисс является бесконечная дробь .5555555..., т. е. 1/3 в шестнадцатеричной форме. Поэтому частное в машинном представлении будет выглядеть так

3F555555