Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Умножение чисел, представленных в форме с фиксированной запятой

 

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

Умножение чисел представленных в форме с фиксированной запятой можно организовать не только на двоичном сумматоре прямого кода, но и на двоичных сумматорах обратного или дополнительного кода. В этом случае произведение дополнительных или обратных кодов сомножителей равно дополнительному или обратному коду соответственно только в случае положительного множителя. Если же множитель отрицательный, то производится коррекция результата: в первом случае прибавляется поправка [A]= а во втором случае прибавляются поправки [A] и [A]об2-n.

Рассмотрим примеры:

1) умножим 5 на 2. 510= 0. 01012, 210 = 0. 00102 Знак результата положительный.

0.0101

x 0.0010

+ 0101

0.01010 = 1010

 

2) умножим 5 на 3

0.0101

x 0.0011

+ 0101

0.1111 = 1510

 

Умножение чисел, представленных в форме с плавающей запятой

 

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

 

A1 x A2 = m12 x m22 = (m1 x m2)2 ,

 

где r1 + r2 - l - характеристика результата.

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

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

 

0 r rmax ,

где rmax = l + pmax .

Рассмотрим пример:

умножим числа с мантиссами m1 = 0,101 (5), m2 = 0,1 (2) и характеристиками

r1 = 1011, r2 = 1010, l = 1000, p1 = 3, p2 = 2, p = p1 + p2 = 5, r = r1 + r2 - l = 001011 + 001010 - 001000 = 001101 = 1310 m = m1 x m2 = 0,01010, необходимо нормализовать ответ. Для этого в данном случае сдвигаем мантиссу влево на 1 разряд и вычитаем 1 из p, получаем p = 4. В итоге имеем m = 0,10102, p = 410 = 01002, r = 1210 = 11002.

 

Ускорение операции умножения

 

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

 

,

 

где tсдв - время выполнения сдвига числа на один разряд; tсл - время суммирования на сумматоре; pi - вероятность появления единицы в разрядах множителя; n - количество разрядов множителя.

Существуют несколько методов ускорения процедуры умножения: анализ двух разрядов множителя одновременно, анализ произвольного количества разрядов множителя, умножение в системе счисления с основанием q=2kи матричные методы умножения.

Рассмотрим первый спосо, ускорения умножения как наиболее наглядный и распространенный для целых чисел, представленных в прямом коде. В связи с тем, что в этом случае в процессе выполнения операции умножения на каждом цикле операции анализируется сразу два разряда множителя, то таких циклов понадобится n/2, где n - длина разрядной сетки множителя без учета знакового разряда. Это число циклов записывается в некоторый счетчик SС. При обнулении содержимого счетчика SС процедура умножения останавливается. Обычно анализируются два младших разряда множителя, поЭтому в конце каждого цикла производится одновременный сдвиг на два разряда вправо изображения суммы частных произведений (Р) и множителя. Причем, таким образом, чтобы при каждом таком сдвиге очередной младший разряд числа Р попадал в старший разряд мантиссы множителя. Обозначим эту процедуру условно как ПС. Очевидно, что в таком случае произведение будет сформировано в разрядной сетке первоначально отведенной для множителя.

Если множимое X и множитель Y, а его два очередных младших разряда (y1y0), то в зависимости от результата анализа этих разрядов предусматриваются следующие действия.

Если y1y0 = 00, то выполняются только процедуры: ПС и SС = SС-1.

Если y1y0 = 01, то выполняются процедуры: Р = P + X, ПС и SС = SС-1.

Если y1y0 = 10, то выполняются процедуры: сдвиг множимого влево на 1 разряд, т.е. умножение его на два, P = P + X, ПС и SС = SС-1.

Если y1y0 = 11, то выполняются три раза P = P + X и ПС, SС = SС-1.

Когда SС = 0 - операция умножения заканчивается.

Как обычно перед началом самой процедуры умножения определяется знак произведения, проверяются на 0 X и Y, если кто-нибудь из них равен 0, то произведению сразу присваивается нулевое значение.

Рассмотрим пример ускоренного умножения 310 на 7810, т.е. когда X = 3, а

Y = 78. Если n = 10, то X = 0000000112, Y = 00010011102, а SС = 5.

 

512 256 128 64 32 16 8 4 2 1

X 00 00 00 00 11 множимое

Y 00 01 00 11 10 множитель

R 00 11 10 10 10 ответ = 234

 

В некотором регистре P будем формировать частные произведения.

1) Анализ 2-х младших разрядов Y. y1y0 = 10. Сдвинуть X на 1 разряд влево и прибавить к P.

 

P 00 00 00 00 00

+X 00 00 00 01 10

P 00 00 00 01 10 сдвиг на 2 разряда P и Y

P 00 00 00 00 01 ---- 10 00 01 00 11 Y

 

2) y1y0 = 11, _ 3 раза прибавляем X к P

P 00 00 00 00 01

+X 00 00 00 00 11

P 00 00 00 01 00

+X 00 00 00 00 11

P 00 00 00 01 11

+X 00 00 00 00 11

P 00 00 00 10 10 сдвиг на 2 разряда P и Y

P 00 00 00 00 10 ---- 10 10 00 01 00 Y

 

3) y1y0 = 00, сдвиг на 2 разряда P и Y

P 00 00 00 00 00 --- 10 10 10 00 01 Y

 

4) y1y0 = 01

P 00 00 00 00 00

+X 00 00 00 00 11

P 00 00 00 00 11 сдвиг на 2 разряда P и Y

P 00 00 00 00 00 --- 11 10 10 10 00 Y

 

5) y1y0 = 00, сдвиг на 2 разряда P и Y

P 00 00 00 00 00 --- 00 11 10 10 10 Y = 23410

 

 

Деление двоичных чисел

Последнее изменение этой страницы: 2016-07-23

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...