русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Уn-уn-1) [Х]Д ·2-n+1 + (уn+1-уn) [Х]Д ·2-n.


Дата добавления: 2013-12-23; просмотров: 695; Нарушение авторских прав


Х]Д [Y]Д = (у1-у0) [Х]Д + (у2-у1) [Х]Д ·2-1 + ...

Умножение чисел в дополнительных кодах

Если числа в ЭВМ представлены в дополнительных кодах, то операцию умножения можно трактовать в общем виде следующим образом:

- если Х>0 и Y>0, то поскольку [Х>0]Д = Х, [Y>0]Д = Y, специфика выполнения умножения здесь не проявляется (см. гл.I. п.4.1);

- если Х<0, а Y>0, то [Х<0]Д = 2+Х и [Х]Д [Y]Д = 2Y + ХY – получается так называемое псевдопроизведение, и для того чтобы получить правильный результат [ХY<0]Д = 2+ХY, необходимо к псевдопроизведению прибавить 2 и вычесть 2Y;

- если Х>0, Y<0, то [Х]Д [Y]Д = 2Х+ХY, и здесь необходима поправка, равная +2 и -2Х;

- если Х<0 и Y<0, то [Х]Д [Y]Д = (2+Х)(2+Y), а правильный результат ХY, и необходима поправка - 4 - 2Х - 2Y.

Существует несколько способов введения поправок. Рассмотрим способ со сдвигом сумм частичных произведений вправо на примере умножения с младших разрядов множителя, обеспечивающий автоматическое введение поправок при любых знаках перемножаемых чисел. Обозначим дополнительный младший разряд множителя, на который производится умножение через y(n+1-i). По отношению к данному разряду старшим будет y(n‑i). Алгоритм вычисления заключается в следующем:

- если y(n+1-i) = y(n-i), то производится лишь сдвиг частичного произведения A(i-1)·2-1;

- если y(n-i) = 0, а y(n+1-i) = 1, то к A(i-1)·2-1 прибавляется [Х]Д;

- если y(n-i) = 1, а y(n+1-i) = 0, то из A(i-1)·2-1 вычитается [Х]Д или к A(i-1)·2-1 прибавляется [-(Х)Д]Д со сменой знака X.

Для этого алгоритма справедлива следующая рекуррентная формула

A(i) = A(i-1)·2-1 + [(у(n+1-i)-у(n-i))·(Х)]Д.

При этом операция состоит из n+1 такта для i=1,...,n+1. Другими словами, умножение производится и на знаковый разряд множителя y0. После умножения на последнем шаге получаем A(n+1) = [Х]Д [Y]Д = [Z]Д и сдвиг A(n+1) не производится.



Рассмотренная методика применима и к умножению со старших разрядов множителя со сдвигом множимого вправо. Алгоритм выполнения операции имеет следующий вид:

Умножим в дополнительном двоичном коде десятичные числа -5 и -6 с фиксированной запятой перед старшим разрядом:

[-5]пр=1.0101, [-5]д=1.1011 (∙2+4,число дробное),

[-6]пр=1.0110, [-6]д=1.1010 (множитель y0. y1 y2 y3 y4∙2+4).

Берем дополнительный разряд множителя y5=0 и вычисляем разность двух старших разрядов множителя на очередном шаге умножения при сдвиге влево с выполнением следующих микроопераций (м/о):

1) y1-y0=0, (A(0)=0)∙2-1

2) y2-y1=-1, A(1) +0.ХПР∙2-1

3) y3-y2=+1, A(2)+[-Х]Д∙2-2

4) y4-y3=-1, A(3)+(0.ХПР )∙2-3

5) y5-y4=0, [Z]Д = (A(4)+0)

С учетом сдвига множителя влево и сумм частичных произведений A(i) влево, и с учетом сдвига Х∙2-1 множимого вправо 1.1011 на каждом шаге умножения имеем:

 

Ш а г Со сдвигом A(i) вправо   Со сдвигом Х вправо
ХПР 0.010100000 ХПР 0.010100000
[-Х]Д 1.101100000 [-Х]Д 1.101100000
м/о Сумматор м/о Сумматор
(A(0)=0)∙2-1 0.000000000 (A(0)=0)+0 0.000000000
SM+0.ХПР 0.010100000 SM+(0.Хп)∙2-1 0.001010000
A(1)∙2-1 0.001010000  
+[-Х]Д 1.101100000 +[-Х]Д∙2-2 1.111011000
SM+[-Х]Д 1.110110000 SM+[-Х]Д∙2-2 0.000101000
[A(2)]Д∙2-1 1.111011000  
Ш а г Со сдвигом A(i) вправо   Со сдвигом Х вправо
+0.Хпр 0.010100000 +(0.Хпр)∙2-3 0.000010100
SM+0.Хп 0.001111000 SM+(0.Хпр)∙2-3 0.000111100
A(3)∙2-1 0.000111100  
[Z]Д=A(4)+0 0.000111100 [Z]Д=A(4)+0 0.000111100

 

Для проверки правильности вычислений умножим полученный результат 0.000111100 на коэффициент 2+8, получим +11110,0 = + (1∙24 + 1∙23 + 1∙22 + 1∙21) = + (16 + 8 + 4 + 2) = + 30. Заметим, что операция умножения со сдвигом сумм частичных произведений выполняется медленнее, чем со сдвигом множимого, так как микрооперации суммирования и сдвига не могут выполнятся одновременно в сумматоре.

 



<== предыдущая лекция | следующая лекция ==>
Операция умножения чисел с фиксированной запятой в прямых кодах | Деление чисел с фиксированной запятой перед старшим разрядом


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.