Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metod_lab_OFK.doc
Скачиваний:
13
Добавлен:
06.11.2018
Размер:
1.13 Mб
Скачать

1.2.1 Множення чисел у форматі з фіксованою комою

Ця операція складає основу усіх методів множення любих чисел, поданих у інших форматах. При виконанні множення велике значення мають код подання чисел і, у деяких випадках, основа системи числення. Багато методів за алгоритмом виконання множення для різних систем числення інваріантні. Місце коми при множенні чисел з фіксованою комою не грає ролі і у результаті завжди наперед відомо. Будемо вважати, що співмножники представляють правильні дроби.

У разі множення дійсних чисел з фіксованою комою множене

A =

і множник B =

створюють добуток згідно з таким виразом

де 0, 1, . , d-1 – цифрові розряди;

= 0, 1, - знакові розряди.

З урахуванням особливостей подання чисел у різних форматах кодування добуток у загальному випадку має вигляд

Z = A * B = ( a + a0)(b + b0) = ab +a0b +ab0 + a0b0 .

Залежно від коду подання чисел, результат має різні значення, які для створення правильного добутку необхідно коректувати або попередньо перетворювати співмножникі.

Множення чисел у доповнювальних кодах відрізняється від множення чисел без знаку тим, що власне знаковий розряд приймає участь в операції множення, а самі числа у процесі множення сприймаються як числа у прямих кодах.

Якщо n – розрядний множник В  0, то у доповнювальному коді він буде таким:

0 b1 b2 b3 . . . bn-1, де b1 b2 b3 bn-1 = | B |

Множення, починаючи з молодших розрядів, будь якого m – розрядного числа А на такий множник буде забезпечувати правильний результат.

Необхідно врахувати, що під час зсуву вправо від’ємного проміжного добутку у крайній зліва розряд числа (перший справа від коми) записується одиниця.

Розглянемо приклади множення додатного та від'ємного множенного (та –А) на додатний множник () у доповнювальних кодах.

Приклад 1 А = + 9/1610; Aдоп = Апр = 0,10012

і В = + 5/1610; Вдоп = Впр = 0,01012

0,1 0 0 1

* 0,0 1 0 1

0,1 0 0 1

копія множеного (b-4 = 1);

0,0 1 0 0 1

зсув проміжного добутку (ДП);

0,0 0 1 0 0 1

зсув ДП (b-3 = 0);

+ 0,1 0 0 1

додавання копії множеного до двічі зсунутого ДП (b-2 = 1);

0,1 0 1 1 0 1

результат додавання;

0,0 1 0 1 1 0 1

зсув ДП;

0,0 0 1 0 1 1 0 1

 знак добутку

зсув ДП (b-1 = 0), отриманий результат у доповнювальному коді;

Результат: (А * В)пр = (А * В)доп = 0,001011012 = + 45/25610.

Приклад 2 А = - 9/1610; Апр = 0,10012; Aдоп = + 0,0001 = 1,01112;

В = +5/1610; Вдоп = Впр = 0,01012.

1,0 1 1 1

* 0,0 1 0 1

1,0 1 1 1

копія множеного (b-4 = 1);

1,1 0 1 1 1

зсув проміжного добутку (ДП), справа від коми дописана 1;

1,1 1 0 1 1 1

зсув ДП (b-3 = 0), справа від коми дописана 1;

+ 1,0 1 1 1

додавання копії множеного до двічі зсунутого ДП (b-2 = 1);

1,0 1 0 0 1 1

результат додавання;

1,1 0 1 0 0 1 1

зсув ДП, зліва від коми дописана 1;

1,1 1 0 1 0 0 1 1

 знак добутку

зсув ДП (b-1 = 0), справа від коми дописана 1. Отриманий результат у доповнювальному коді.

Результат: (А * В)пр = ()доп + 1 = 1, + 0,00000001 = 1,001011012 = - 45/25610.

Якщо множник В < 0, то у доповняльному коді він буде таким: 1,

де .

У цьому випадку – множення будь-якого числа А на від'ємний множник – результат буде більшим від правильного на величину А. Для отримання правильного значення добутку необхідно провести коригування, яке можна виконати на останьому кроці множення – при множенні на знаковий розряд множника, віднімаючи від проміжного добутку множене А.

Наступні приклади проілюструють процедуру множення додатного або від'ємного множеного на від'ємний множник.

Приклад 3 А = + 9/1610; Aдоп = Апр = 0,10012; (- A)доп = + 0,0001 = 1,01112;

В = - 5/1610; Впр = 0,01012 Вдоп = + 0,0001 = 1,10112

0,1 0 0 1

* 1,1 0 1 1

0,1 0 0 1

копія множеного (b-4 = 1);

0,0 1 0 0 1

зсув проміжного добутку (ДП);

+ 0,1 0 0 1

додавання другої копії множеного (b-3 = 1);

0,1 1 0 0 0 1 1

результат додавання;

0,0 1 1 0 1 1

зсув ДП;

0,0 0 1 1 0 1 1

зсув ДП (b-2 = 0);

+ 0,1 0 0 1

додавання третьої копії множеного (b-1 = 1);

0,1 1 0 0 0 1 1

результат додавання;

0,0 1 1 0 0 0 1 1

зсув ДП

+ 0,0 1 1 1

корекція результату шляхом віднімання (додавання у доповняльному коді від’ємного значення) множеного (- А)доп;

1,1 1 0 1 0 0 1 1

 знак добутку

Отриманий результат у доповнювальному коді;

Результат: (А * В)пр = ()доп + 1 = 1, + 0,00000001 = 1,001011012 = - 45/25610.

Приклад 4 А = - 9/1610; Апр = 0,10012; Aдоп = + 0,0001 = 1,01112;

В = - 5/1610; Впр = 0,01012 Вдоп = + 0,0001 = 1,10112

1,0 1 1 1

* 1,1 0 1 1

1,0 1 1 1

копія множеного (b-4 = 1);

1,1 0 1 1 1

зсув проміжного добутку (ДП), справа від коми дописана 1;

+ 1,0 1 1 1

додавання другої копії множеного (b-3 = 1);

1,0 0 1 0 1

результат додавання;

1,1 0 0 1 0 1

зсув (ДП), справа від коми дописана 1;

1,1 1 1 0 0 1 0 1

зсув ДП (b-2 = 0);

+ 1,0 1 1 1

додавання третьої копії множеного (b-1 = 1);

1,0 0 1 1 1 0 1

результат додавання;

1,1 0 0 1 1 1 0 1

зсув (ДП), справа від коми дописана 1;

+ 0,1 0 0 1

корекція результату шляхом віднімання (додавання у доповнювальному коді від’ємного значення) множеного (фактично – у прямому коді через друге доповнення) (-(- А))доп;

1 0,0 0 1 0 1 1 0 1

  знак добутку

одиниця переповнення, що виникла при додаванні знакових розрядів, відкидається. Отриманий результат у доповнювальному коді;

Результат: (А * В)пр = (А * В)доп = 0,001011012 = + 45/25610

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]