Арифметические операции над двоичными числами с плавающей точкой

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

Сложение (вычитание). Операция сложения (вычитания) производится в следующей последовательности.

1. Сравниваются порядки (характеристики) исходных чисел путем их вычитания Арифметические операции над двоичными числами с плавающей точкой - student2.ru . При выполнении этой операции определяется, одинаковый ли порядок имеют исходные слагаемые.

2. Если разность порядков равна нулю, то это значит, что одноименные разряды мантисс имеют одинаковые веса (двоичный порядок). В противном случае должно проводиться выравнивание порядков.

3. Для выравнивания порядков число с меньшим порядком сдвигается вправо на разницу порядков Арифметические операции над двоичными числами с плавающей точкой - student2.ru . Младшие выталкиваемые разряды при этом теряются.

4. После выравнивания порядков мантиссы чисел можно складывать (вычитать) в зависимости от требуемой операции. Операция вычитания заменяется операцией сложения в соответствии с данными табл.2.1. Действия над слагаемыми производятся в ОК или ДК по общим правилам.

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

6. Если мантисса результата не нормализована, то осуществляются нормализация и коррекция значений порядка.

Пример.

Сложить два числа A10 = +1.375; B10 = - 0.625

А2= +1.011 = 0 : 1011*101; B2 = - 0.101 = - 0 : 101*100.

В нормализованном виде эти числа будут иметь вид:

Порядок Мантисса

[A2]п = 0 : 1 0 : 1011 - для числа А10

Арифметические операции над двоичными числами с плавающей точкой - student2.ru знак числа

[B2]п =0 : 0 1: 101 - для числа В10

1. Вычитаем порядки Арифметические операции над двоичными числами с плавающей точкой - student2.ru = 1- 0 = 1. В машине эта операция требует операции сложения с преобразованием порядка чисел в дополнительный код:

Арифметические операции над двоичными числами с плавающей точкой - student2.ru Арифметические операции над двоичными числами с плавающей точкой - student2.ru

Арифметические операции над двоичными числами с плавающей точкой - student2.ru

Определяем, что Арифметические операции над двоичными числами с плавающей точкой - student2.ru

2. Порядок первого числа больше порядка второго числа на единицу. Требуется выравнивание порядков.

3. Для выравнивания порядков необходимо второе число сдвинуть вправо на один разряд:

2]исх = 0 : 0 1 : 101

после сдвига

2/]п = 0 : 1 1: 0101

[m/B]дк = 1: 1011

4. Складываем мантиссы:

[mA]дк = 0 : 1011

+ [m/B]дк = 1 : 1011

[mC]дк = 0 : 0110

Мантисса числа С - положительная.

5. Порядок числа С равен порядку числа с большим порядком, т.е. pс = +1

2]п = 0 : 1 0 : 0110.

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

6. Нормализуем результат путем сдвига мантиссы на один разряд влево и соответственно вычитаем из значения порядка единицу:

2]п = 0 : 0 0 : 110;

С10 = + 0.75.

Пример сложения:

Сложить двоичные дроби 1011,12 и 10,1012.

        (переносы)
,1     (первое число)
+   ,1 (второе число)
,0 (результат)

Выполняя проверку, находим:

1011,12 = 11,510, 10,1012 = 2,62510, 1110,0012 = 14,12510, 11,510 + 2,62510 = 14,12510, значит, в вычислениях ошибок нет.

Пример вычитания:Выполнить вычитание дробных двоичных чисел 10,11 и 110,101.

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

  . .   .     (займы)
  (уменьшаемое)
      (вычитаемое)
    (разность)

Так как числа вычитаются наоборот, то результат должен быть отрицательным: 10,11 – 110,101 = -11,001. В ходе проверки устанавливается, что:

10,112 = 2,7510, 110,1012 = 6,62510, -11,0012 = -3,87510, 2,7510 – 6,62510 = -3,87510, т. е. вычисления произведены без ошибок.

Умножение (деление).

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

1. При умножении (делении) порядки складываются (вычитаются) так, как это делается над числами с фиксированной точкой.

2. При умножении (делении) мантиссы перемножаются (делятся).

3. Знаки произведения (частного) формируются путем сложения знаковых разрядов сомножителей (делимого и делителя). Возможные переносы из знакового разряда игнорируются.

Пример:Умножить дробные двоичные числа 11,1 и 10,011.

Запишем числа друг под другом, выровненные по правому краю и без двоичных запятых:

  ×       (первый множитель без двоичной запятой)
      (второй множитель без двоичной запятой)
    (переносы сложения)
          (число, полученное умножением единицы 10,011 на первое число)
          (число, полученное умножением единицы 10,011 на первое число)
          (число, полученное умножением единицы 10,011 на первое число)
(результат без учета двоичной запятой)


Поскольку в двух исходных числах справа от их запятых находится в совокупности 4 знака, то и в результате нужно отделить 4 знака после двоичной запятой, т. е. реальным результатом умножения этих двух чисел является 11,12.10,0112 = 1000,01012.

Действительно,

11,12 = 3,510, 10,0112 = 2,37510, 1000,01012 = 8,312510, 3,510. 2,37510 = 8,312510, что подтверждает правильность вычислений.

Пример:Произвести деление двоичных чисел 1111 и 100 с остатком.

   
       
       
         

Другими словами, 1111/100 = 1111/100, или, поскольку знаменатель выражен числом 2 в натуральной степени, 11,11.

Действительно, при проверке видим, что:

11112 = 1510, 1002 = 410, 112 = 310, 1510 : 410 = (33/4)10 = 3,7510 и, таким образом, деление выполнено правильно.

Пример:Разделить двоичные числа 1111 и 100 и выразить результат двоичной дробью.

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

 
  ,1
         
         
         
         
         
         
             

Проверка данных вычислений приведена в предыдущем примере.

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