Операции в АЛУ на двоичными числами с плавающей точкой
Р – порядок
М – мантисса
А=М*2Р
Если Р определяет диапазон представления чисел в ЭВМ, то М – точность представления чисел в ЭВМ.
С:=АqВ; qÎ{+,-,*,/}
Необходимое оборудование:
N+2 разряд в мантиссах необходим для округления, т.к. выполнение операций с плавающей точкой связаны с потерей точности.
Операнды (ОП) поступают из памяти в ОА в нормализованном виде; знаковые разряды дублируются только на ОЭ. Результат операции тоже должен быть в нормализованном виде.
Нормализованное число: 1/2£|М|<1.
Нормализованное число – это число, у которого первая информационная цифра мантиссы равна 1 для положительных чисел и равна 0 – для отрицательных чисел, и знаковые разряды мантиссы при этом одинаковые.
00,11001 – нормализованное число
11,0011 – нормализованное число
Требования для нормализованных чисел:
Мс(0)ÅМс(2)=1
Мс(0)ÅМс(1)=0.
Виды нарушения нормализации:
1. Нарушение нормализации влево(переполнение мантиссы).
01,110
01 – для положительных чисел
10 – для отрицательных чисел
Восстановление нормализации в этом случае происходит сдвигом мантиссы на один разряд, при этом мантисса уменьшается в два раза, поэтому порядок нужно увеличивать на 1.
2. Нарушение нормализации вправо(знаковые разряды мантиссы равны, но не выполняется условие: Мс(0)ÅМс(2)=1).
00.00010
11.110
Восстановление нормализации возможно сдвигом мантиссы влево и уменьшением порядка на 1.
-1/210=11,1002 – нормализованное число, не выполняется условие Мс(0)ÅМс(2)=1;
+1/210=00,1002
Исключительные ситуации при нормализации и после выполнения операций с плавающей точкой.
1. Аварийное завершение операции(прерывание).
Мантисса=0, а порядок любой. Ситуация такая называется потеря значимости.
Fпз:=1; Р:=0.
2. При нарушении нормализации влево, после сдвига мантиссы вправо может возникнуть переполнение порядка. Такая ситуация называется переполнение порядка.
Fпп :=1.
3. При нарушении нормализации вправо, после сдвига мантиссы влево может возникнуть отрицательное переполнение порядка. Такая ситуация называется исчезновением порядка.
Fип :=1.
Микропрограмма нормализации чисел:
Алгоритм сложения чисел с плавающей точкой.
Даны:
А=МА*2Ра
В=МВ*2Рв
Найти:
С=МС*2Рс
Операнды и результат должны быть в нормализованном виде.
- Проверка особых ситуаций:
Если МВ=0, то С:=А
Если МА=0, то С:=В
Переход к концу.
- Выравнивание порядков.
0,5*103+0,4*102=0,5*103+0,04*103=0,54*103.
Вычисление разности порядков: РС:=РА-РВ.
Если |РС|³n+1, то сумма принимается равной числу с большим порядком:
Если РС=0, то С:=А;
Если РС=1, то С:=В.
Переход к концу.
Если РС¹0, то производится уравнивание порядков слагаемых, путем приведения числа с меньшим порядком к числу с большим порядком. Уравнивание порядков выполняется арифметическим сдвигом мантиссы числа с меньшим порядком вправо на число разрядов равное |РС|.
Если ЗнРс=1, то преобразуется МА.
Если ЗнРс=0, то преобразуется МВ.
Сдвиг осуществляется следующим образом:
При каждом элементарном сдвиге на 1 разряд из РС вычитается 1, если сдвигается МВ, и прибавляется 1, если сдвигается МА.
Выход из цикла по РС=0.
Если МА и МВ представлены в прямом коде, то старшие освобождающиеся при сдвиге информационные разряды заполняются нулями; если в инверсном коде, то знаковыми разрядами.
- Мантиссы, полученные после уравнивания порядков, складываются как числа с фиксированной точкой.
МС:=МА+МВ.
Порядок суммы принимается равным наибольшему из порядков слагаемого.
РС:=max(РА½РВ).
Отличие от алгоритма сложения с фиксированной точкой – не вырабатывается сигнал переполнения, т.к. возможна нормализация со сдвигом вправо.
- Округление мантиссы результата осуществляется прибавлением 1 к n+2 разряду сумматора мантисс.
- Нормализация результата (см. алгоритм выше).
Исключительные ситуации при сложении:
· Потеря значимости;
· Переполнение порядка при нормализации со сдвигом вправо;
· Исчезновение порядка при нормализации со сдвигом влево.
Умножение чисел с плавающей точкой.
С=А*В
Даны:
РА, МА, РВ, МВ.
Найти:
РС, МС.
- Порядки складываются по правилам сложения чисел с фиксированной точкой. Мантиссы перемножаются по правилам умножения чисел с фиксированной точкой.
- Младшие разряды произведения, выдвигаемые в такте сдвига из сумматора мантисс, не сохраняются, кроме n+2 разряда.
- Результат округляется добавлением 1 в n+2 разряд МС и нормализуется.
Исключительные ситуации:
- Исчезновение порядка при нормализации со сдвигом влево;
- Переполнение порядков, т.к. имеет место сложение порядков в алгоритме.
Деление чисел с плавающей точкой.
С=А/В.
РС=РА-РВ;
МС=МА/МВ.
Порядки вычитаются, а мантиссы делятся по соответствующим алгоритмам выполнения операций с фиксированной точкой.
Исключительные ситуации:
· Деление на ноль;
- Исчезновение порядка при нормализации со сдвигом влево;
· Переполнение порядков, т.к. имеет место сложение порядков в алгоритме.
Особенности применяемого алгоритма деления с фиксированной точкой.
В классический алгоритм деления вносятся незначительные изменения:
· МА перед выполнением деления с фиксированной точкой сдвигается влево на один разряд, порядок увеличивается на 1.
· Предусматривается нормализация со сдвигом влево.
Выполнение операций десятичной арифметики в АЛУ.
Не во всех системах команд есть такие операции. Наличие операций десятичной арифметики целесообразно для несложных расчетов коммерческого характера с простыми формулами, где нужны целочисленные вычисления и невыгодно переводить числа в двоичные представления и обратно, для того чтобы над ними выполнить 2-3 операции.
Десятичные числа представляются в АЛУ в двоично-десятичном коде.
Сложение двух десятичных чисел сводится к последовательной выработке сумм вида:
PiCi=Ai+Bi+Pi+1 , где
Ai и Bi – четырехразрядные коды десятичных цифр слагаемых;
Pi+1 – десятичный перенос(перенос со сдвигом 10) из предыдущего младшего десятичного разряда суммы;
Pi – десятичный перенос в следующий старший разряд суммы;
Ci – 4-х разрядный двоичный код цифр суммы
Ai+Bi+Pi+1<=19;
Построение такой схемы достаточно сложное и схема будет сложной, поэтому обычно для сложения десятичных чисел используется обычный двоичный сумматор, который настраивается на уровне микропрограммы применительно к специфике сложения десятичных чисел.
Вычисление десятичной суммы может быть параллельно-последовательным процессом, т.к. двоичный сумматор имеет ограниченную длину, а число десятичных цифр может варьироваться.
Три случая возникающие при сложении десятичных чисел на двоичном сумматоре:
- 0£Ci£9 Ci
0010+0011=0101
Pi=0
- 10£Ci£15 Ci
1001+0011=1100
Pi=0
надо: Pi=1, Ci=0010
+
P-1.0010 - Ci
- 16£Ci£19 Ci 0001
1000+1001=0001 +
Pi=1 0110
Если Ci³10, то всегда нужна коррекция.