Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по информатики.doc
Скачиваний:
47
Добавлен:
13.11.2018
Размер:
1.53 Mб
Скачать

9.3.4.2. Сложение вещественных чисел

Порядок действий при сложении вещественных чисел гораздо сложнее, нежели для целых чисел. Он приводится ниже:

  1. слагаемые размещаются в разрядных сетках (см. п. 9.3.2.2) в прямых кодах;

  2. определяется, порядок какого слагаемого меньше и насколько меньше. Для этого из любого из двух порядков вычитается оставшийся порядок и анализируется результат: если результат положителен, то большим порядком является уменьшаемое, если отрицателен, – то вычитаемое. Значение результата используется в следующих двух шагах. При вычитании, очевидно, выполняется сложение в обратном или дополнительном коде, причем в случае работы с порядками, которые являются целыми числами, эта операция идентична рассмотренной в п. 9.3.4.1;

  3. порядок слагаемого, имеющий меньшее значение, увеличивается, становясь равным большему слагаемому. Если порядок отрицателен, он увеличивается, будучи преобразован в обратный или дополнительный код, по правилам, рассмотренным в п. 9.3.4.1;

  4. числовые разряды мантиссы слагаемого с меньшим порядком сдвигаются вправо на столько разрядов, на сколько был увеличен меньший порядок. Часть разрядов при этом теряется, а оставшиеся свободными разряды заполняются нулями;

  5. мантиссы складываются. При этом отрицательные мантиссы переводятся в обратный или дополнительный код и складываются по правилам, рассмотренным в п. 9.3.4.1. Результату приписывается общий (выровненный в предыдущих шагах) порядок;

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

Пример 9.12. Сложить в дополнительном коде числа 0,10112Е-2 и –0,10012Е-3. Разрядная сетка из девяти разрядов, из них четыре разряда – под порядок, пять разрядов – под мантиссу.

Решение показано ниже:

  1. разместим слагаемые в разрядных сетках. Имеем:

0

(9.13)

,10112Е-2

(9.12)

1

0

1

0

0

1

0

1

1

-0,10012Е-3

1

0

1

1

1

1

0

0

1

  1. вычитаем из порядка –2 порядок –3. Имеем: -2 – (-3) = -2 + 3. Таким образом, надо сложить числа –2 и +3 в дополнительном коде, располагая разрядной сеткой в 4 разряда (мы на время «забудем» о мантиссе). При выполнении сложения используются правила сложения в дополнительном коде для целых чисел.

Имеем:

Прямые коды

Обратные

коды

Дополнительные коды

1

0

1

0

1

1

0

1

1

1

1

0

0

0

1

1

0

0

1

1

0

0

1

1

Результат сложения:

0

0

0

1

Поскольку результат положителен, он представлен в прямом коде.

Таким образом, большим порядком обладает первое слагаемое (действительно, -2 > -3). Порядок больше на 1.

  1. меньший порядок, принадлежащий числу –0,10012Е-3, увеличивается на 1, что следует из предыдущего шага, т.е. выполняется действие: -3 + 1. Это действие заменяется сложением в дополнительном коде.

Имеем (разрядная сетка соответствует порядку):

Прямые коды

Обратные

коды

Дополнительные коды

1

0

1

1

1

1

0

0

1

1

0

1

0

0

0

1

0

0

0

1

0

0

0

1

Результат сложения:

1

1

1

0

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

1

1

0

1

1

0

1

0

Таким образом, результат увеличения меньшего порядка равен –102 = -2.

  1. сдвиг числовых разрядов мантиссы из (9.13) на один разряд вправо (на время «забываем» о порядке):

1

1

0

0

1

1

0

1

0

0

  1. сложение мантисс. Поскольку второе слагаемое имеет отрицательный знак, сложение выполняется в дополнительном коде. Имеем:

Прямые коды

Обратные коды

Дополнительные коды

0

1

0

1

1

0

1

0

1

1

0

1

0

1

1

1

0

1

0

0

1

1

0

1

1

1

1

1

0

0

Результат сложения:

0

0

1

1

1

Поскольку результат положителен, он представлен в прямом коде. После приписывания результату общего, выровненного порядка имеем:

1

0

1

0

0

0

1

1

1

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

  • сдвигаем числовые разряды мантиссы на один разряд влево. Освободившийся младший разряд заполняем нулем. Имеем:

0

1

1

1

0

  • поскольку мантисса увеличилась при сдвиге на один порядок, уменьшаем порядок на 1. Имеем: -102 –12 (или –2 –1). Для сложения отрицательных чисел переведем их в дополнительный код. Тогда:

Прямые коды

Обратные коды

Дополнительные коды

1

0

1

0

1

1

0

1

1

1

1

0

1

0

0

1

1

1

1

0

1

1

1

1

Результат сложения:

1

1

0

1

Поскольку результат отрицателен, он представлен в дополнительном коде. Переведем его сначала в обратный код, затем – в прямой код. Имеем:

1

1

0

0

1

0

1

1

После преобразования результат имеет вид:

1

0

1

1

0

1

1

1

0

Поскольку старший числовой разряд мантиссы равен единице, она нормализована.

Таким образом, получен результат 0,1112 Е-3.

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

Пример 9.13. Сложить в дополнительном коде числа -0,11002Е4 и –0,10002Е4. Разрядная сетка из девяти разрядов, из них четыре разряда – под порядок, пять разрядов – под мантиссу.

  1. разместим слагаемые в разрядных сетках. Имеем:

-

(9.14)

0,11002 Е4

0

1

0

0

1

1

1

0

0

-

(9.15)

0,10002 Е4

0

1

0

0

1

1

0

0

0

  1. вычитаем из порядка 4 порядок 4. Имеем: 4 – 4. Для сложения чисел в дополнительном коде выполним сначала необходимый перевод, а затем - сложение.

Имеем:

Прямые коды

Обратные

коды

Дополнительные коды

0

1

0

0

0

1

0

0

0

1

0

0

1

1

0

0

1

0

1

1

1

1

0

0

Результат сложения:

0

0

0

0

Поскольку результат равен нулю, порядки слагаемых равны и никаких преобразований по выравниванию порядков (шаги 2 – 4 из приведенной выше последовательности действий) не требуется. Поэтому сразу складываем мантиссы. Поскольку оба слагаемых отрицательны, переведем их сначала в обратный, затем в дополнительный коды. Имеем:

Прямые коды

Обратные коды

Дополнительные коды

1

1

1

0

0

1

0

0

1

1

1

0

1

0

0

1

1

0

0

0

1

0

1

1

1

1

1

0

0

0

Результат сложения:

0

1

1

0

0

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

  1. мантисса результата вместе со знаком сдвигается вправо на один разряд. Таким образом, старший разряд мантиссы становится равным ее знаковому разряду. При этом, очевидно, теряется младший числовой разряд;

  2. знаковый разряд результата приравнивается знаковому разряду слагаемых;

  3. порядок увеличивается на единицу.

Для нашего примера имеем следующие действия:

  1. сдвиг мантиссы («забываем» о порядке):

0

1

1

0

0

0

1

1

0

  1. формирование знакового разряда дает результат:

1

0

1

1

0

  1. формирование порядка: к порядку +4 прибавляется 1. Оба слагаемых положительны, поэтому никаких преобразований не требуется. Имеем:

слагаемые

0

1

0

0

результат

0

0

0

1

0

1

0

1

Таким образом, результат примера 9.13 имеет вид:

0

1

0

1

1

0

1

1

0

П

дополнительный код результата

оскольку мантисса результата отрицательна, она представлена в дополнительном коде и требует перевода в прямой код. Для этого выполним соответствующие преобразования. Имеем:

0

1

0

1

1

0

1

1

0

обратный код результата

0

1

0

1

1

0

1

0

1

прямой код результата

0

1

0

1

1

1

0

1

0

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