1.7. Операции сложения и вычитания чисел в форме с плавающей запятой
1. 7. Операции сложения и вычитания чисел в форме с плавающей запятой Формат числа с плавающей запятой рассматривался выше в разделе 1. 1. В общих чертах алгоритм выполнения операций сложения и вычитаниясоответствует процедурам ручного счета. Рассмотрим g = a ± b a = A × 10a b = B × 10b g = S × 10c A, B, S – нормализованные мантиссы: 1/10 £ A < 1, 10 – основание системы счисления; a, b, c – порядки. Выполним этот пример в десятичной системе счисления: a = -0. 9572 × 10-4 a = -4 А=-0. 9572 b = 0. 1567 × 10-3 b = -3 В= 0. 1567 g = a + b 1) Находится разность порядков: z = a – b = -4 + 3 = -1 так как z < 1, то a < b 2) Уравнивание порядков чисел происходит за счет того, что сдвигается вправо мантисса числа с меньшим порядком, т. е А = -0. 09572 3) Порядок результата приравнивается порядку большего числа с=в= -3 4) Выполняется сложение мантисс А = - 0. 09572 + В = 0. 15670 S = 0. 06098 5) Нормализация мантиссы, т. е. мантисса сдвигается влево на 1 разряд S = 0. 60980 6) Коррекция порядка c= – 4 7) Окончательный результат g = 0. 60980 × 10-4 В АЛУ для выполнения операций с плавающей запятой имеются практически две части: - АЛУ для действий над порядками; - АЛУ для действий над мантиссами. Эти АЛУ имеют разную разрядность, различаются алгоритмами, но взаимосвязаны. 1. 7. 1. Алгоритм действий над порядками 1) Прием из ОЗУ порядков a и b; 2) Сравнение порядков r = a - b; 3) Выравнивание порядков чисел если r ≥ 0 ( a ³ b ), то сдвиг B на |r | разрядов вправо, c = a; иначе ( a < b ) сдвиг A на |r | разрядов влево, c = b. Преобразование параллельного кода разности порядков в число-импульсный код ( количество сдвигов ) можно осуществить с помощью реверсивного счетчика.
4) при нормализации мантисс одновременно корректируется порядок результата. Если выполняется сдвиг вправо, то с=с+1. При сдвиге мантиссы влево на каждый сдвиг производится с=с-1. Соответствующие сигналы поступают из АЛУ мантисс. 1. 7. 2. Алгоритм действий над мантиссами 1) Прием мантисс A и B из ОЗУ; 2) Выравнивание порядков за счет того, что мантисса меньшего числа сдвигается вправо на количество разрядов, равное | z |. 3) Находится S = A ± B; 4) Выполняется нормализация мантиссы результата. Если | S| > 1, то сдвиг вправо S на один разряд, c=c + 1 иначе сч. сдв=0 М1: если | S| < 2-1, то сдвиг влево S на один разряд S: =S × 2-1 и коррекция порядка c=c – 1, иначе | S | ≥ 2-1 и переход к М2, иначе если сч. сдв ≥ n, то S = 0 и переход к М2, иначе переход к М1. М2: выдача в ОЗУ мантиссы S и порядка с, конец. 1. 7. 3. Пример вычисления для двоичных чисел Будем вычислять γ = α + β α = –. 10001 · 10 010 β =. 11110 · 10 001 Примем, что действия над порядками выполняются по алгоритму ПП, а над мантиссами – по алгоритму ПД ( см. раздел 3 ). 1) Выполняем операции над порядками чисел: [a] п = 0. 010 [b] п = 0. 001 r = |a| – |b| = . 0 1 0 – . 0 0 1 . 0 0 1 Так как заем из старшего разряда z0 = 0, то r ≥ 0, а так как ЗНr = 0, то |a| ≥ |b|, разность порядков r =. 001. Следовательно, α > β, и порядок результата [c]п=[a]п = 0. 010. Для выравнивания порядков нужно сдвигать вправо мантиссу меньшего числа β. 2) Действия над мантиссами. [A]п = 1. 10001 [В]п = 0. 11110 Сдвигаем вправо мантиссу В, получаем [В]п 2-1 = 0. 01111 В соответствии с используемым алгоритмом ПД находим DМ. Так как D =0, ЗНA = 1, ЗНB = 0, то DМ =1. Следовательно, должно быть выполнено вычитание модулей с использованием
дополнительного кода. Находим псевдосумму в виде S* = [| A |]п + [-| B|]д = 1 0 0 0 1 + 1 0 0 0 1 1. 0 0 0 1 0 Как видно, вышла за пределы разрядной сетки единица переноса P0 = 1, это означает, что S* > 0 и |S| =. 0 0 0 1 0 Для нормализации выполняем сдвиг влево на три разряда |S| =. 1 0 0 0 0, одновременно корректируется порядок с = с – 0 1 1 = - 0 0 1 Определим знак мантиссы. Так как |А| > |В|, то ЗНS = ЗНА = 1. Окончательный результат γ =. 1 0 0 0 0 · 1 0-001 1. 8. Умножение двоичных чисел Существуют две основных группы алгоритмов умножения: 1) умножение в прямых кодах 2) умножение в дополнительных кодах. Умножение в прямых кодах целесообразно использовать, когда числа в памяти хранятся в прямых или обратных кодах. Вторая группа алгоритмов применяется, если числа в памяти хранятся в дополнительных кодах. Рассмотрим операции двоичного умножения в прямых кодах для чисел с фиксированной запятой. Будем вычислять: С=А*В; |A|< 1; |B|< 1; A≠ 0; B≠ 0. |B| = b1*2-1+ b2*2-2+ b3*2-3+............... + bn*2-n |C| = |A|*( b1*2-1+ b2*2-2+ b3*2-3+............... + bn*2-n) Знаки, как правило, непосредственно в операции умножения не участвуют и знак произведения определяется логическим путем. Если ЗНА = ЗНВ то ЗНС = 0, иначе ЗНС = 1 Для простоты изложения будем считать, что сомножители положительны и в дальнейших выкладках значок модуля не будет употребляться. В общем случае произведение может быть записано в виде суммы частных произведений. Как правило, принимается С0 = 0. С= С0+С1+С2+............... +Сn На каждом шаге умножения вычисляется очередная сумма частных произведений, которую обозначим Si. Так при умножении от старших разрядов множителя первая сумма частных произведений будет S1=C0 + C1 и т. д. При выполнении операции умножения всего возможны четыре алгоритма: — умножение от младших разрядов множителя со сдвигом множимого влево; — умножение от младших разрядов множителя со сдвигом суммы частных произведений вправо; — умножение от старших разрядов множителя со сдвигом множимого вправо; — умножение от старших разрядов множителя со сдвигом суммы частных произведений влево.
Реализация этих алгоритмов приводит к построению вариантов АЛУ, различающихся по аппаратурным затратам и быстродействию. Наиболее употребительными являются второй и третий алгоритмы.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|