Сложение чисел с плавающей запятой
При сложении чисел складываемые цифры (разряды) должны иметь одинаковый вес. Это требование выполняется, если складываемые числа имеют одинаковые порядки. Пусть имеются два числа с плавающей запятой:
A=±mAr±pA,
B=±mBr±pB.
Алгоритм сложения чисел с произвольными знаками состоит в следующем.
1. Производится сравнение порядков pA и pB. Для этого из порядка числа A вычитается порядок числа B. Разность p=pA-pB указывает, на сколько разрядов требуется сдвинуть вправо мантиссу числа с меньшим порядком. Если p=pA-pB>0, то pA>pB и для выравнивания порядков необходимо сдвинуть вправо мантиссу MB. Если p=pA-pB<0, то pB>pA и для выравнивания порядков необходимо сдвинуть вправо мантиссу MA. Если p=pA-pB=0, то pA=pB и порядки слагаемых выравнивать не требуется.
2. Выполняется сдвиг соответствующей мантиссы до тех пор, пока p≠0.
3. Выполняется сложение мантисс MA и MB по правилу сложения правильных дробей.
4. Если при сложении мантисс произошло переполнение, то производится нормализация путем сдвига мантиссы суммы вместе со знаковым разрядом вправо на один разряд с увеличением порядка на единицу. Если же происходит денормализация, то выполняется сдвиг мантиссы результата на соответствующее количество разрядов в сторону, противоположную нарушению нормализации с соответствующим изменением порядка суммы.
Пример: МА=-0,10110 рА=+0111
МВ=-0,11011 рВ=+0101
[MA]доп=1,01010 p= [рА]доп+[-рВ]доп= 0.0111
[MB]доп=1,00101 1.1011
1 0.0010
так как [рА-рВ]доп>0, то сдвигу подвергается мантисса МВ.
В рассматриваемом примере при каждом сдвиге мантиссы на один разряд из положительной разности порядков производим последовательное вычитание единицы до тех пор, пока в результате не будет получен ноль. При этом выполняется анализ разности порядков на каждом шаге. Если она отлична от нуля, то производится очередной сдвиг соответствующей мантиссы. В случае если разность [рА-рВ]доп<0, то необходимо либо прибавлять единицу до нуленого результата, либо измненить знак разности на противоположный и, как и выше, выполнять вычитание единицы.
[MB]доп=1,00101 0.0010
[-1]доп= 1,1111
[MB]доп=1,10010 1 0.0001
[MB]доп=1,11001 01 [-1]доп= 1,1111
0.0000
[MB]доп=1,11001 01
[MA]доп=1,01010
11,00011 01 = [МА+В] рА+В=max(рА,pB)=pA=+0.0111
Полученный результат нормализован. После выполнения операции округления получим [МА+В]= 1,00011.
Дата добавления: 2015-05-05; просмотров: 1812;