Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Вопросы на экзамен - Ответы на экзамен - .doc + .pdf / 14. Методы выполнения операции умножения и деления чисел с ф.з. при условии

.pdf
Скачиваний:
55
Добавлен:
10.05.2014
Размер:
934.34 Кб
Скачать

14. Методы выполнения операции умножения и деления чисел с ф.з. при условии изображения исходных чисел и результата в прямом и дополнительном кодах.

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

Пусть два числа X и Y представлены с фиксированной запятой в виде:

[X]пк = X.x1x2...xn – множимое

[Y]пк = Y.y1y2...yn – множитель

Представим множитель в виде:

[Y]пк = Y. (y1*2-1 + y2*2-2 + ... + yn*2-n)

Тогда:

[Z]пк = [X]пк*[Y]пк = |X| (y1*2-1 + y2*2-2 + ... + yn*2-n) =(|X|*y1*2-1 + |X|*y2*2-2 + ... + |X|*yn*2-n) =(|X|*2-1*y1 + |X|*2-2*y2 + ... + |X|*2-n*yn)

Это есть аналитическая запись алгоритма умножения двух чисел, начиная со старших разрядов множителя. Алгоритм:

1.Множимое сдвигается вправо на 1 разряд

2.Анализируется цифра множителя. Если она – нуль, то частичное произведение не суммируется, а если она – единица, то частичное произведение добавляется к общему результату.

3.Последовательность операций по пунктам 1 и 2 продолжается "n" раз.

Знак произведения находится независимо от получения цифровой части по формуле:

ЗZ = X (+) Y.

Умножение с младших разрядов в прямом коде

Напишем выражение для произведения двух чисел в несколько изменённом виде, а именно:

ЗZ = X (+) Y.

[Z]пк = [X]пк*[Y]пк = (|X|*y1*2-1 + |X|*y2*2-2 +... + |X|*yn*2-n) =( |X|*2-1*y1 + 2-1 (|X|*2-1*y2 + 2-1 (|X|*2-1*y3 + (...)))) =((...(( |X|*yn*2-1 + |X|*yn-1)2-1 + |X|*yn-2)2-1 + ... +|X|*y2 )2-1 + |X|*y1 )*2-1

Это выражение называется преобразованием по схеме Горнера и задаёт алгоритм умножения с младших разрядов множителя.

Таким образом, для умножения должна выполняться следующая последовательность действий:

1.Анализируется младшая цифра множителя. Если она равна "1", то множимое участвует в формировании части произведения. В противном случае – не участвует.

2.Полученное частичное произведение сдвигается вправо на 1 разряд.

3.Операции по пунктам 1 и 2 выполняются до старшего разряда.

Замечание

При сдвиге в прямом коде освободившиеся разряды слева и справа заполняются "0". В обратном и доп. Кодах при сдвиге влево – "0", вправо – ЗНАКОВЫМ РАЗРЯДОМ.

Умножение с младших разрядов в дополнительном коде

К Y справа приписывается "0" ("дополнительный разряд") Алгоритм:

[Z]дк = (...(0+[X]дк*[yn+1 – yn])*2-1 + [X]дк*[yn – yn-1])*2-1 + ...

... + [X]дк*[y2 – y1])*2-1 + [X]дк*[y1 – y0]

Если yn = yn+ 1 , то производится сдвиг частичного произведения. Если yn – yn+1 = 1, то к частичному произведению прибавляется [X]дк

Если yn – yn+1 = –1, то из частичного произведения вычитается [X]дк, т.е. сложение с доп. кодом [-Xдк].

Умножение со старших разрядов в дополнительном коде

К Y справа приписывается "0" ("дополнительный разряд")

[Z]дк = [X]дк*[Y]дк = [X]дк*(y1 – y0 ) + [X]дк*(y2 – y1 )*2-1 + ... + + [X]дк*(yn+1 – yn )*2-n

Деление в прямом коде со сдвигом и автоматическим восстановлением остатка

ЗZ = X(+)Y |X| - |Y| = α0

Если αi ≥0, то Zi = 1 и 2αi - |Y| = αi+1 (Z0 – целая часть результата).

Если αi < 0, то Zi = 0 и 2αi + |Y| = αi+1

и т. д.

Деление в дополнительном (обратном) кодах со сдвигом и автоматическим восстановлением остатка

[X]дк,ок; [Y]дк,ок

[Z]дк = Z0,Z1…Zn Z0 – знаковый разряд αi = 2 αi-1 + [-[Y]дк,ок]дк,ок , если ЗX = ЗY αi = 2 αi-1 + |Y|дк,ок , если ЗX ≠ ЗY

Если Зαi = ЗY => Zi = 1 Если Зαi ≠ ЗY => Zi = 0

В первом такте вместо Зαi-1 берётся ЗX, а вместо 2 αi-1 берётся [X]дк,ок

Если при вычислении промежуточных остатков получится 01,…… или 10,….. , то это ≠ ЗY

Соседние файлы в папке Вопросы на экзамен - Ответы на экзамен - .doc + .pdf