Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




. Возможны четыре случая знакосочетания сомножителей.

1) Мн>0,

Мт>0.

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

2) Мн>0,

Мт<0.

Так как Мн и Мт имеют разные знаки, то результат будет иметь отрицательный знак. Следовательно, результат должен быть представлен в дополнительном коде [Мн∙Мт]доп=2-Мн∙Мт. Для формирования произведения выполним умножение Мн на Мт¢ (дополнение):

Мн∙Мт¢= Мн ∙(1 - Мт)= Мн - Мн∙Мт.

Таким образом, погрешность Δ умножения равна разности [Мн∙Мт]доп. и Мт∙Мн¢

Δ=2-Мн∙Мт- Мн + Мн∙Мт=2-Мн=[-Мн]доп=[ [Мн]доп]доп

и должна быть внесена в полученный результат в качестве поправки.

Пример: Мн = 0,1011 (алгоритм умножения А)

Мт = - 0,1101

Δ= [- Мн]доп = 1,0101

[- Мт]доп = 1,0011

0,0000

+ 0,1011 = Мн b4

0,1011

0, 0 101 1 ∙ 2-1

+ 0,1011 = Мн b3

1,0000 1 (произошло переполнение)

0 ,1 000 01 ∙ 2-1 (коррекция)

0, 0 10 0001 ∙ 2-1 ( ∙ 2-1) ∙ 2-1

0, 0 010 0001 ∙ 2-1 (( ∙ 2-1)∙ 2-1)∙ 2-1

+ 1,0101 Δ = [- Мн]доп (поправка)

1,0111 0001 =[Mн ∙ Mт]доп

- 0,1000 1111 Mн ∙ Mт

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

3) Mн<0,

Mт>0.

Аналогично предыдущему случаю

[Мн∙Мт]доп=2-Мн∙Мт,

Мн¢∙Мт= (1 - Мн)∙Мт= Мт - Мн∙Мт.

Таким образом, погрешность умножения равна разности [Мн Мт]доп и Мт∙Мн¢.

Δ=2-Мн∙Мт- Мт + Мн∙Мт=2-Мт=[-Мт]доп=[ [Мт]доп]доп.

Использовать этот вариант неудобно, так как нужно вводить поправку [-Mт]доп в конце умножения, а в результате сдвигов Мт постепенно исчезает на регистре множителя и для поправки нужно либо вводить дополнительный регистр, либо вносить поправку в сумматор на первом такте умножения.

При этом знакосочетании возможно умножение без ввода поправки. Рассмотрим этот вариант на примере умножения по алгоритму Г (это справедливо и для других алгоритмов).

Мн∙Мт = А ∙ В = [ A ∙ b1∙ 2-1 ]доп + [ A ∙ b2∙ 2-2 ]доп+... + [A∙ bn∙ 2-n ]доп.

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

[ A ∙ b1∙ 2-1 + A ∙ b2∙ 2-2 +... + A∙ bn∙ 2-n ]доп = [Мн ∙Мт]доп.

В этом случае поправка вводится автоматически на каждом этапе умножения.

Пример: Mн = -0,1011

Mт = 0,1101

b1…b4 4
[Mн]доп= 1,0101

0,00000000

+ 1, 1 0101000 = [Mн ∙ b1 ∙ 2-1]доп

1,10101000

+ 1, 11 010100 = [Mн ∙ b2 ∙ 2-2]доп

1,01111100

+ 1, 1111 0101 = [Mн ∙ b4 ∙ 2-4]доп

1,01110001 [Mн ∙ Mт]доп

-0,10001111 Mн ∙ Mт

4) Mн<0,

Mт<0.

Mн ∙ Mт = 2 - [Mн ∙ Mт]доп

[Mн]доп ∙ (1 - Mт) = [Mн]доп - [Mн]доп ∙ Mт = [Mн]доп - [Mн ∙ Mт]доп

Δ=2 - [Mн ∙ Mт]gдоп - [Mн]доп + [Mн ∙ Mт]доп = 2 - [Mн]доп = [[Mн]доп]доп

Пример: Mн = - 0,1011 умножение будем выполнять

Mт = - 0,1101 по алгоритму умножения Г

[Mн]доп = 1,0101

[Mт]доп = 1,0011

Δ =[-Mн]доп = 0,1011

0,00000000

+ 1, 111 01010 = [Mн ∙ b3 ∙ 2-3]доп

1,11101010

+ 1, 1111 0101 = [Mн ∙ b4 ∙ 2-4]доп

1,11011111

+ 0, 1011 0000 Δ (поправка)

0,10001111 [Mн∙ Mт]доп

 




Поделиться с друзьями:


Дата добавления: 2014-12-26; Просмотров: 647; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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