Математика

Сложения и вычитания чисел с плавающей запятой


Сложения и вычитания чисел с плавающей запятой
1. Производится выравнивание порядков чисел.  Порядок  меньшею  (по  модулю)
числа принимается равным порядку большего числа, а мантисса  меньшего  числа
сдвигается вправо  на  число  S-ичных  разрядов,  равное  разности  порядков
чисел.

2. Производится сложение (вычитание) мантисс, в результате  чего  получается
мантисса суммы (разности).

3. Порядок результата принимается равным порядку большего числа.

4. Полученная сумма (разность) нормализуется.

Примем, что числа с плавающей запятой имеют основание порядка S = 16.

Первое слагаемое (уменьшаемое) поступает  на  входной  регистр  Рг1,  второе
слагаемое (вычитаемое) — на входной регистр Рг3. Знаки слагаемых хранится  в
триггерах знаков Тг3н1 и Тг3н2. Смещенные порядки слагаемых  пересылаются  в
регистры РгС и РгD. Схема СОЛО  применяется  для  сравнения  и  выравнивания
порядков слагаемых. Сумматор См, его входные регистры РгА и РгВ  и  выходной
регистр РгСм используются при сложении  (вычитании)  мантисс,  а  также  при
передаче  мантисс  в  процедурах  выравнивания   порядков   и   нормализации
результата.

Операция сложения (вычитания) может быть подразделена  на  следующие  этапы:
1) прием операндов, 2) выравнивание  порядков,  3)  сложение  мантисс  и  4)
нормализация результата.

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

         РгЗ: = ШИВх, РгВ: = 0, Тг3н1: = Рг3[0]
         < прием X, установка в 0 входного регистра сумматора для Х и
         фиксация знака Х в Тг3н1>;

         Рг1: = ШИВых, РгА: = 0, Тг3н2: = если сложение то Рг1[0] иначе
         [pic]       < прием Y, установка в 0 входного регистра для Y,
         фиксация знака Y в ТгЗн2 при сложении либо противоположного знака
         при вычитании >;

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

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

1) [pic] (m— число разрядов мантиссы). В  качестве  результата  суммирования
сразу же может  быть  взято  первое  слагаемое,  так  как  при  выравнивании
порядков  все  разряды  мантиссы  второго   слагаемого   принимают   нулевое
значение;

2) [pic].  В  качестве  результата  суммирования  может  быть  взято  второе
слагаемое;

3) [pic]. Можно приступить к суммированию мантисс;

4) [pic]Мантисса второго слагаемого сдвигается  на  [pic]  разрядов  вправо,
затем производится суммирование мантисс;

5) [pic]Перед выполнением суммирования мантисс производится cдвиг  на  [pic]
разрядов вправо мантиссы первого слагаемого.

За порядок результата при выполнении  суммирования  принимается  больший  из
порядков операндов.

Выравнивание порядков осуществляется следующим  образом.  Смещенный  порядок
числа Х из РгЗ передается в регистр РгD, РгСОЛО и в счетчик,  соединенный  с
выходом РгСОЛО. Затем в РгС передается смещенный порядок числа Y:

         РгС:  = О, PD [0]:  = 0,  PгD [1 ( 7] := Рг3 [1 ( 7];
         РгСОЛО: = РгС ( PгD;
         Сч1: = РгСОЛО;
         РгС [О]: = 0,  РгС [1 ( 7] = Pг [1 ( 7];

После этого начинается сравнение порядков чисел  Х  и  Y  на  СОЛО  и  сдвиг
мантиссы числа с меньшим порядком вправо,

Для того чтобы учесть случаи 1 и 2, возникающие при  сравнении  порядков,  и
не делать лишних сдвигов мантиссы, превратившейся  в  процессе  выравнивания
порядков в 0, на счетчике циклов СчЦ фиксируется предельное  число  сдвигов,
равное количеству шестнадцатеричных цифр мантиссы:

                                  СчЦ: = 6;

При выполнении  сдвига  на  один  шестнадцатеричный  разряд  содержимое  СчЦ
уменьшается на 1. При СчЦ = 0 сдвиги прекращаются и  в  качестве  результата
берется большее слагаемое.

Микропрограмма выравнивания порядков:

|МК:    |если РгС > РгD то МК1 иначе если РгС = РгD то МКЗ иначе    |
|       |МК2;                                                       |
|MK1:   |PгB [8 ( 31]: = PгЗ [8 ( 31];                              |
|       |РгСм: = П(4) См, РгСм [0 ( 3]: = 0, Сч1 := Сч1+1           |
|       |<сдвиг вправо мантиссы Х и увеличения порядка X,           |
|       |первоначально занесенного в РгСч1, на 1>;                  |
|       |Рг3[8 ( 31]:=РгСм[8 ( 31]; РгD:=Сч1, СчЦ: =  СчЦ  - 1      |
|       |<фиксация сдвинутой мантиссы Х и увеличенного порядка X,   |
|       |уменьшение на 1 числа цифр мантиссы X, не вышедших за      |
|       |разрядную сетку>;                                          |
|       |если СчЦ ( 0 то МК;                                        |
|       |РгВ: = 0, РгА: = Рг1, РгСм := См;                          |
|       |ШИВых: = РгСм;                                             |
|       |конец                                                      |
|       |<выдача Y в качестве результата—случай 2 при сравнении     |
|       |порядков>;                                                 |
|МК2:   |РгА[8 ( 31] :=Рг1 [8 (31];                                 |
|       |РгСм: = П (4) См, РгСм [0 ( 3] : = 0, Сч1 := Сч1-1         |
|       |<сдвиг вправо мантиссы Y и уменьшение большего порядка X,  |
|       |первоначально занесенного в Сч1, на 1. Уменьшение          |
|       |производится до тех пор, пока порядок Х не сравняется с    |
|       |порядком Y, после чего в качестве порядка результата       |
|       |принимается сохраненный в Рг3 исходный порядок Х>;         |
|       |Рг1 [1 ( 31]: = РгСм [8 ( 31], РгD: = Сч1, СчЦ: = СчЦ - 1, |
|       |если СчЦ ( 0, то МК4 иначе РгА: =0, РгВ: =Рг3, РгСм: =См,  |
|       |ШИВых: = РгСм,                                             |
|       |конец                                                      |
|       |<выдача Х в качестве результата — случай 1 при сравнении   |
|       |порядков>;                                                 |
|МК4:   |если РгС > PгD то МК2;                                     |
|       |PгD[0]: = 0, РгD[1 ( 7]: = Рг3[1 ( 7], РгС = 0;            |
|       |РгСОЛО : = РгС ( PгD;                                      |
|       |Сч1: = РгСОЛО                                              |
|       |<фиксация порядка Х после завершения выравнивания в        |
|       |качестве порядка результата>;                              |
|МКЗ:   |РгСм: = 0, Pгl [0 ( 7] : = РгСм, РгЗ [0 ( 7] : = РгСм      |
|       |<обнуление поля порядка слагаемых>;                        |


После выравнивания порядков модули мантисс хранятся в Pгl и РгЗ  в  разрядах
с 8-го по 31-й, их знаки в Тг3н2 и Тг3н1, а порядок результата  в Сч1.

Сложение мантисс. Анализируются знаки мантисс и при равенстве знаков  модули
мантисс складываются.  Если  оказывается,  что  См  [7]  =  1,  то  возникло
переполнение при сложении мантисс.  В  случае  переполнения  мантисса  суммы
сдвигается  на  четыре  двоичных  разряда  (один  шестнадцатеричный  разряд)
вправо, а порядок увеличивается на 1 (Сч1: = Сч1 + 1). Если после этого  Сч1
[0] = 1, то формируется признак прерывания из-за переполнения порядка.  Если
переполнения нет,  то  в  РгСм  формируется  результат  операции,  для  чего
содержимое Сч1 [1 ( 7] заносится в РгСм [1  (  7],  в  РгСм  [0]  передается
знак, а в РгСм [8 ( 31]— мантисса суммы.

При различных знаках мантисс отрицательная мантисса  передается  на  входной
регистр сумматора в обратном коде и производится суммирование  ее  с  прямым
кодом  положительной  мантиссы  и  1,  прибавляемой   к   младшему   разряду
сумматора. Знак результата фиксируется  в  триггере  знака.  От  полученного
результата,  если  он  отрицателен,  берется  его  модуль.  Если   результат
нормализован (См [8 ( 11] ( 0), то на РгСм  заносятся  знак  результата  (по
значению триггера знака), порядок по значению Сч1 и модуль мантиссы.

Если результат не нормализован и нет исчезновения  значимости  (мантисса  не
равна 0), производится нормализация. Мантисса результата сдвигается влево  и
одновременно  уменьшается  порядок  результата  (Сч1:  =  Сч1  -   1).   При
отрицательном  переполнении  порядка  (Сч1  [0]  =  1)  формируется  признак
исчезновения  порядка.  Если  нормализация  завершается   без   исчезновения
порядка, формируется результат операции из кода знака, порядка и мантиссы.

Микропрограмма процедуры сложения мантисс:

|       |если ТгЗн ( Тг3н2 то МЗ;                                   |
|       |РгА: = Рг1, РгВ: = РгЗ;                                    |
|       |РгСм: = См;                                                |
|       |если См[7] = 1 то М2;                                      |
|М1:    |РгСм [ 1 ( 7]: = Сч1 [1 ( 7];                              |
|       |РгСм [0] :== если Тг3н1=0 то 0 иначе 1;                    |
|М:     |ШИВых: = РгСм;                                             |
|       |конец;                                                     |
|М2:    |Сч1:=Сч1+1, РгСм := П(4)См, РгСм[0 ( 3]:=0;                |
|       |если Сч1[0]=0 то М1 иначе прерывание из-за переполнения    |
|       |порядка;                                                   |
|МЗ:    |если Тг3н1=0 то РгА :=[pic], РгВ: = РгЗ иначе              |
|       |РгА : = Рг1, РгВ: = [pic];                                 |
|       |РгСм :=РгА+РгВ +1;                                         |
|       |если См[0]=0 то M4;                                        |
|       |Рг3:= РгСм;                                                |
|       |РгА :=0, РгВ: =[pic];                                      |
|       |РгСм:= РгА +РгВ +1;                                        |
|М4:    |ТгЗн1 := РгЗ [0];                                          |
|М5:    |если См [8 ( 11] ( 0 то M1;                                |
|       |если См ( 0 то М6;                                         |
|       |РгСм: = 0, прерывание из-за потери значимости;             |
|M6:    |Сч1:=Сч-1, РгСм := Л(4)См, РгСм[28(31]: = 0;               |
|       |РгЗ: = РгСм;                                               |
|       |РгВ : = РгЗ, РгА: = 0;                                     |
|       |РгСм: = См;                                                |
|       |если Сч1[0]=0 то М5;                                       |
|       |РгСм: = 0, прерывание из-за исчезновения порядка;          |



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



смотреть на рефераты похожие на "Сложения и вычитания чисел с плавающей запятой "