Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
оифтик 08-2012 готовый.docx
Скачиваний:
76
Добавлен:
11.05.2015
Размер:
7.45 Mб
Скачать

2.2.2. Выполнение операций умножения чисел, представленных в форме с фиксированной точкой

Операция умножения чисел с ФТ выполняется в 2 этапа:

1) определение знака произведения при помощи сложения знаковых разрядов по модулю 2:

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

Таблица умножения в двоичной системе счисления:

0 х 0 = 0

0 х 1 = 0

1 х 0 = 0

1 х 1 = 1

Обычно для выполнения операции умножения применяются два способа, различающиеся тем, с какого разряда множителя (с младшего или со старшего) начинается умножение множимого на множитель.

Операция умножения является одной из самых весомых операций в ЭВМ.

Рассмотрим пример выполнения операции умножения чисел с ФТ.

Пример 2.1

Предположим, необходимо перемножить числа [x1]пр= 1,1010(2) и [x2]пр= 0,1101(2).

1 этап: Определяем знак произведения.

0 1 = 1

2 этап: Перемножим множители.

Порядок перемножения определяется нумерацией цифр сомножителя.

1-й способ

2-й способ

0,1010

×

0,1101

0,1010

×

0,1101

4321

номера цифр множителя

1234

1010

0000

+ 1010

1010

0.10000010

частичные произведения

1010

1010

+ 0000

1010

0.10000010

Как видим, результаты совпадают при выполнении операции умножения обоими способами.

Если сомножители хранятся в памяти ЭВМ не в прямом коде, то и умножение производится в ДК или ОК. Предпочтительнее умножение выполнять в ДК. Возможны 4 случая:

1) х1> 0; x2> 0; x3 = |x1||x2| = |x1x2|доп = |x1|доп|x2|доп,

2) х1> 0; x2< 0;|[x1]доп||[x2]доп| = |x1|(10N – |x2|) =10N1| – |x1||x2|.

Это значительно отличается от модуля кода произведения

|[x1·x2]доп| =

1 – (|x1||x2|) – для дробных чисел;

102N – (|x1||x2|) – для целых чисел.

Для получения модуля дополнительного кода истинного произведения |[x1·x2]доп| необходимо к псевдопроизведению добавить величину

2 = 1 – |x1| – для дробных чисел;

2 = 10N (10N– |x1|) – для целых чисел.

3) х1< 0; x2> 0.

3 = 1 – |x2| – для дробных чисел;

3 = 10N (10N – |x2|) – для целых чисел.

4) х1< 0; x2< 0.

4 = |x1| + |x2| – 1 – для дробных чисел;

4 = 10N(|x1| + |x2| – 10N)– для целых чисел.

Пример 2.2

Перемножить числа [x1] = 1,1010 и [x2]= 0,1101 в дополнительном коде.

[x1]доп = 1,0110 и [x2]доп= 0,1101.

Знак произведения равен

В результате перемножения сомножителей в дополнительном коде получим

0.0110

×

0.1101

0110

0000

0110

0110

0.01001110

Как видим, результат перемножения модулей чисел в дополнительном коде не совпадает с результатом перемножения этих чисел в прямом коде (пример 2.1).

Необходима корректировка результата на величину

3= 1 - |x2| = 0,00110000, т.к. х1< 0, x2> 0.

Просуммируем значения псевдопроизведения и 3.

.01001110

.00110000

х3 = 1.01111100–в дополнительном кодезнак.

Переведем х3 в прямой код.

[х3]пр = 1.10000001 + 1 = 1.10000010.

Это совпадает с результатом перемножения этих чисел в прямом коде (пример 2.1). Отметим, что при умножении дробных чисел с ФТ невозможно переполнение разрядной сетки.

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