Чаще всего для исключения потери старших разрядов из-за переполнения разрядной сетки умножение выполняют в прямых кодах с числами, представленными с фиксированной запятой перед старшим разрядом (с отрицательными индексами). Для чисел [Х]пр = x3. x-1,...,x-n, [Y]пр = y3. y-1, ..., y-n ([Х]пр , [Y]пр <1) требуется получить произведение
пр
пр
пр
[Z]пр = [Х]п р[Y]пр = z3. z-1 , z-2, ... z-n.
В дальнейшем, чтобы упростить написание формул, отрицательные индексы опускаются.
Операция выполняется в два этапа. Отдельно определяется знак произведения z3 с учетом знаков сомножителей x3 и y3 в соответствии с выражением:
z3 = x3y3.
Затем определяется цифровая часть произведения мантисс сомножителей. С этой целью процесс умножения можно представить в следующем виде
Z = ХY = Х (y1 2-1 + y2 2-2 + ...+ y(n-1) 2-n+1+ y(n) 2-n) =
(1)
= Х 2-1 y1 + Х 2-2y2 + ... + Х 2-n+1 y(n-1) + X 2-n y(n).
Это выражение после преобразования можно представить в виде:
Полученные выражения (1, 2) являются аналитическими записями двух основных способов умножения: со старших разрядов множителя (1) и младших разрядов множителя (2).
Согласно выражению (2) при умножении с младших разрядов должна выполняться следующая последовательность микроопераций:
- анализируется младшая цифра множителя. Если yn = 1, то множимое Х участвует в формировании цифровой части произведения; если yn = 0, то Х не участвует в формировании произведения;
- полученное первое частичное произведение, равное 0+Xyn, сдвигается на один разряд вправо, то есть умножается на 2-1. Указанная последовательность действий справедлива при умножении на все последующие разряды. Так, при умножении на разряд y(n-1):
- анализируется цифра множителя yn-1. Если yn-1 = 1, то множимое прибавляется к сдвинутому первому частичному произведению, т.е. A2 = (0 + Xyn) 2-1 + X1. Если yn-1=0, то множимое не участвует в формировании произведения, т.е.
A2 = (0 + Xyn)·2-1 + X0.
Полученное второе частичное произведение сдвигается на один разряд вправо. Указанную процедуру умножения можно описать следующей рекуррентной формулой:
A(i) = A(i-1) · 2-1 + y(n+1-i) · Х
(3)
Для выполнения умножения необходимо повторить n тактов (i=1,2,..,n) в соответствии с формулой (3) и в заключение осуществить последний n-й сдвиг A(n)2-1 = XY = Z. Отметим, что при перемножении n-разрядных чисел получается 2n-разрядное произведение (n старших разрядов и n младших). При этом получение только n старших разрядов произведения или всех 2n разрядов обеспечивается суммированием в n-разрядном сумматоре. Время умножения равно:
Тх = (tSM+ tСД) · n, где tSM - время суммирования; tСД - время сдвига.
Согласно выражению (1) умножение со старших разрядов множителя должно выполняться в следующей последовательности:
- множимое сдвигается на 1 разряд вправо, т.е. X·2-1;
- анализируется старшая цифра множителя y1. Если y1 = 1, то X·2-1 участвует в формировании произведения, при y1 = 0, X·2-1 - не участвует в формировании произведения.
Выполнение такой последовательности соответствует умножению на старший разряд множителя и справедливо при умножении на все последующие разряды. Так, при умножении на второй разряд:
- производится второй сдвиг множимого, т.е. (X·2-1)·2-1;
- анализируется значение y2 и осуществляется или не осуществляется передача X·2-1 на суммирование.
Процесс умножения повторяется до просмотра всех y(i), i = 1,2,...,n.