14.1. СЕМЕЙСТВО МЕТОДОВ БУТА
Метод Бута:
Идеи лежащие в основе семейства методов:
Общая идея:
Очевидно что:
2^m + 2^(2m-1) + ... + 2^k = 2^(m+1) - 2^k
Таким образом если мы найдем внутри множителя последовательность
единиц:
00011111000
то мы сможем ее заменить на
_
00100000100
уменьшив таким образом число частных произведений.
Метод Бута:
Берем множитель и анализируем ему 2 бита
(0,1) ------- > (-1, 0, 1)
(Для самого младшего разряда считаем что более младший разряд равен 0)
------------------------------------------------------------------
B{i}B{i-1} Что значит Что делаем
------------------------------------------------------------------
1 0 Начало цепочки из единиц вычитаем -M
0 1 Завершение цепочки из единиц прибавляем +M
0 0 нет цепочки единиц ничего не делаем
1 1 внутри цепочки единиц ничего не делаем
------------------------------------------------------------------
Модифицированный алгоритм Бута (MBR):
Анализируются сразу 3 разряда:
(0, 1) --- > (-2, -1, 0, -1, 2)
------------------------------------------------------------------
B{i+1}B{i}B{i-1} что значит что делаем
------------------------------------------------------------------
0 0 0 нет цепочки единиц ничего не делаем
0 0 1 завершение цепочки из единиц +M
0 1 0 одиноко стоящая единица +M
0 1 1 завершение цепочки единиц +2M
1 0 0 начало цепочки из единиц -2M
1 0 1 начало+завершение -M (-2M +M)
1 1 0 начало цепочки из единиц -M
1 1 1 внутри цепочки единиц ничего не делаем
------------------------------------------------------------------
Алгоритм Лемана:
Если две группы нулей разделены одной единицей то вместо вычитания
в позиции k и сложения в позиции (k+1) мы можем сделать сложение
в позиции k
k
|
000000100000
|
k+1
Если две группы единиц разделены нулем то вместо сложения в позиции
k и вычитания в позиции (k+1) можно сделать вычитание в позиции k
k
|
111110111111
|
k+1
Реализации:
умножение сразу на 2 бита.
минимизировать количество частных произведений
P = A * B = (a{n-1}*2^(n-1) + ... + a{0}*2^0) *
(b{n-1}*2^(n-1) + ... + b{0}*2^0) =
A*b{n-1}*2^(n-1)+ ... + A*b{0}*2^0
Заметим
b{i}*2^i = b{i}*2^(i+1) - 2*b{i}*2^(i-1)
Частные произведения после подстановки будут иметь вид
A * (-2*b{i+1} + b{i} + b{i-1}) * 2^i
Алгоритм Бута:
Простое умножение (для примера):
Простой умножитель Бута на 2 бита (MBR):
Схема ячейки в умножителе Бута
Топология ячейки в умножителе Бута
Умножитель Бута на 3 бита:
Index Prev Next