Арифметика чисел в формате ПЗ

Операции над числами в формате ПЗ имеют существенные отличия от операций с ФЗ, поэтому реализуются с помощью отдельного операционного устройства (ОПУ).

ОПУ для операции с ПЗ должны обеспечивать, как минимум, операции:

- Сложение

- Вычитание

- Умножение

- Деление

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

К началу выполнения арифметического действия операнды операции помещаются в соответствующие регистры АЛУ.

Подготовительный этап выполнения арифметических операций ПЗ

Операции над ВЧ в операционном устройстве (ОПУ) выполняются над тремя составляющими (знаками, мантиссами и порядками операндов) тремя блоками: Блоком обработки знаков, Блоком обработки мантисс и Блоком обработки операндов по отдельности. Для хранения операндов и результатов предусмотрены соответствующие регистры.

- на этапе загрузки операндов в ОПУ осуществляется распаковка чисел, то есть разбиение на три составляющие;

- при распаковке в старшем разряде регистра мантиссы восстанавливается единица, которая в записи числа отсутствовала;

- происходит проверка на равенство нулю операндов (в IEEE 754 ВЧ=0, если нулю равны все разряды порядка).

Заключительный этап

- выявление нулевого значения мантиссы (потеря значимости);

- нормализация мантиссы;

- выявление отрицательного переполнения порядка;

- упаковка составляющих результата.

Сложение и вычитание

В ОПУ операции сложения и вычитания являются более сложными, чем операции умножения и деления.

Включают в себя этапы:

1. Подготовительный;

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

3. Определяется операнд, имеющий меньший порядок. В нем производится сдвиг мантиссы вправо на число разрядов, равное разности порядков операндов. Например, Арифметика чисел в формате ПЗ - student2.ru .

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

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

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

6. проверка на переполнение.

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

7. заключительный этап.

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

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

Потеря значимости может произойти при:

- сложении и вычитании мантиссы;

- сдвиге мантиссы вправо для устранения переполнения;

- сдвиге мантиссы влево (до тех, пор пока старшую позицию не займет единица);

- порядок может стать отрицательным (в ходе сдвига мантиссы уменьшается порядок: получение отрицательного значения свидетельствует о получении числа, непредставимого в данном формате, так как значения смещенных порядков всегда положительны).

Алгоритм сложения нормализованных чисел представлен в виде блок-схемы на Рис.1.1.

Арифметика чисел в формате ПЗ - student2.ru

Рисунок -Блок-схема алгоритма сложения нормализованных чисел

Например, X1=0,87654×101, а X2=0,94567×102. Согласно алгоритму Dp=1 и p1<p2. Следовательно, p=p2=2, а мантисса числа X1 должна быть сдвинута на 1 разряд вправо (при этом из-за ограниченности разрядно сетки пропадет цифра 4). Новая мантисса получается суммированием: M=0,94567+0,08765=1,03332; поскольку она выходит за допустимый интервал представления мантисс, необходимо его нормализовать M’=0,10333 (при этом теряется цифра 2 в меньшем разряде); p’=p+1=3. Окончательно получаем: X=0,10333×103. Точный результат суммирования оказался бы 103,3324. Таким образом, сложение чисел в нормализованной форме с ограниченной длиной разрядной сетки приводит к появлению погрешностей операции сложения. Более того, можно показать на примерах (рекомендуется это сделать самостоятельно), что такое суммирование не обладает ассоциативностью, т.е. (X1ÅX2)ÅX3¹X1Å(X2ÅX3).

Умножение

Умножение чисел с ПЗ происходит в следующем порядке:

1. подготовительный этап;

2. производится проверка на равенство нулю одного из сомножителей. Если один из операндов равен нулю, в качестве результата выдается 0, представленный в данном формате чисел с ПЗ.

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

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

5. производится нормализация и компоновка результата, аналогично тому, как это имеет место при сложении и вычитании. Отметим, что при нормализации результата возможно переполнение порядка.

6. заключительный этап.

Пример 3. Выполнить умножение двоичных нормализованных чисел:

(0.11101* 2101) * (0.1001 * 211) = (0.11101* 0.1001) * 2(101+11) = 0.100000101 * 21000.

Деление

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

Деление

Деление чисел с ПЗ происходит в следующем порядке:

1. подготовительный этап;

2. проводится проверка на 0. Если нулю равен делитель, в зависимости от реализации выдается сообщение о делении на 0, либо в качестве результат принимается бесконечность (для этого в некоторых форматах ПЗ имеется специальная кодовая комбинация). Когда нулю равно делимое, результат также принимается равным нулю.

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

4. проверка на переполнение поря ков и потерю значимости.

5. деление мантисс;

6. заключительный этап (нормализация, округление и компоновка числа из мантиссы и порядка).

Пример . Выполнить деление двоичных нормализованных чисел:

0.1111 * 2100 / 0.101* 211 = (0.1111 / 0.101) *2(100-11) = 1.1 *21 = 0.11*210.

Наши рекомендации