Центральный Дом Знаний - Алгоритм Бута

Информационный центр "Центральный Дом Знаний"

Заказать учебную работу! Жми!



ЖМИ: ТУТ ТЫСЯЧИ КУРСОВЫХ РАБОТ ДЛЯ ТЕБЯ

      cendomzn@yandex.ru  

Наш опрос

Я учусь (закончил(-а) в
Всего ответов: 2690

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Форма входа

Логин:
Пароль:

Алгоритм Бута

Алгоритм Бута, алгоритм умножения, который позволяет перемножить два двоичных числа в дополнительном коде. Алгоритм был разработан Эндрю Дональдом Бутом в 1951 при проведении исследований кристаллографии в колледже Birkbeck в Bloomsbury (Лондон). Бут пользовался настольными вычислителями, которые выполняли операцию сдвига быстрее, чем операцию сложения, и создал алгоритм для увеличения скорости их работы. А.Б. представляет интерес при изучении архитектуры компьютера. 

А.Б. включает в себя циклическое сложение одного из двух заранее установленных значений A и S с произведением P, а затем выполнение арифметического сдвига вправо над P. Пусть m и r — множимое и множитель соответственно, а x и y представляют собой количество битов в m и r.

  1. Установить значения A и S, а также начальное значение P. Каждое из этих чисел должно иметь длину, равную (x + y + 1).

    1. A: Заполнить наиболее значимые (левые) биты значением m. Заполнить оставшиеся (y + 1) бит нулями.

    2. S: Заполнить наиболее значимые биты значением (−m) в дополнительном коде. Заполнить оставшиеся (y + 1) бит нулями.

    3. P: Заполнить наиболее значимые x бит нулями. Справа от них, заполнить биты значением r. Записать 0 в крайний наименее значимый (правый) бит

  2. Определить значение двух наименее значимых (правых) битов P.

    1. Если их значение равно 01, вычислить значение P + A. Переполнение игнорировать.

    2. Если их значение равно 10, вычислить значение P + S. Переполнение игнорировать.

    3. Если их значение равно 00, действие не требуется. P используется без изменений на следующем шаге.

    4. Если их значение равно 11, действие не требуется. P используется без изменений на следующем шаге.

  3. Выполнить операцию арифметического сдвига над значением, полученным на втором шаге, на один бит вправо. Присвоить P это новое значение.

  4. Повторить шаги 2 и 3 y раз.

  5. Отбросить крайний наименее значимый (правый) бит P. Это и есть произведение m и r.

Пример:

Вычислить 3 × (−4). В этом случае m = 3, r = −4, x = 4, y = 4:

  • A = 0011 0000 0

  • S = 1101 0000 0

  • P = 0000 1100 0

  • Выполним цикл 4 раза :

    1. P = 0000 1100 0. Крайние два бита равны 00.

      • P = 0000 0110 0. Арифметический сдвиг вправо.

    2. P = 0000 0110 0. Крайние два бита равны 00.

      • P = 0000 0011 0. Арифметический сдвиг вправо.

    3. P = 0000 0011 0. Крайние два бита равны 10.

      • P = 1101 0011 0. P = P + S.

      • P = 1110 1001 1. Арифметический сдвиг вправо.

    4. P = 1110 1001 1. Крайние два бита равны 11.

      • P = 1111 0100 1. Арифметический сдвиг вправо.

  • Произведение равно 1111 0100 (−12 в десятичной системе)

Вышеупомянутой техники недостаточно, когда множимое является наибольшим по модулю отрицательным числом, которое может быть представлено в текущей разрядной сетке (например, если размер множимого 4 бита, то это значение равно −8). Один из возможных способов решить эту проблему — добавить один дополнительный бит слева от A, S и P. Ниже мы покажем усовершенствованную технику на примере умножения −8 на 2 используя по 4 бита под множимое и множитель:

  • A = 1 1000 0000 0

  • S = 0 1000 0000 0

  • P = 0 0000 0010 0

  • Выполним цикл 4 раза :

    1. P = 0 0000 0010 0. Крайние два бита равны 00.

      • P = 0 0000 0001 0. Арифметический сдвиг вправо.

    2. P = 0 0000 0001 0. Крайние два бита равны 10.

      • P = 0 1000 0001 0. P = P + S.

      • P = 0 0100 0000 1. Арифметический сдвиг вправо.

    3. P = 0 0100 0000 1. Крайние два бита равны 01.

      • P = 1 1100 0000 1. P = P + A.

      • P = 1 1110 0000 0. Арифметический сдвиг вправо.

    4. P = 1 1110 0000 0. Крайние два бита равны 00.

      • P = 1 1111 0000 0. Арифметический сдвиг вправо.

  • После отбрасывания крайних бит, получаем значение произведения: 11110000 (−16 в десятичной системе). 

Рассмотрим положительный множитель, состоящий из блока единиц, окруженных нулями, например 00111110. Произведение определяется по формуле :

 M \times \,^{\prime\prime} 0 \; 0 \; 1 \; 1 \; 1 \; 1 \; 1 \; 0 \,^{\prime\prime} = M \times (2^5 + 2^4 + 2^3 + 2^2 + 2^1) = M \times 62

где M — множимое. Количество операций может быть уменьшено вдвое, если представить произведение слеюущим образом :

 M \times \,^{\prime\prime} 0 \; 1 \; 0 \; 0 \; 0 \; 0 \mbox{-1} \; 0 \,^{\prime\prime} = M \times (2^6 - 2^1) = M \times 62.

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

 (\ldots 0 \overbrace{1 \ldots 1}^{n} 0 \ldots)_{2} \equiv (\ldots 1 \overbrace{0 \ldots 0}^{n} 0 \ldots)_{2} - (\ldots 0 \overbrace{0 \ldots 1}^{n} 0 \ldots)_2.

Таким образом, мы действительно можем заменить операцию умножения на последовательность единиц в исходном числе более простыми операциями: сложение с множителем, сдвиг частичного произведения, вычитание множителя. Алгоритм использует тот факт, что нам не нужно делать ничего кроме сдвига, когда очередной разряд в двоичном множителе равен нулю, а также простое математическое свойство: 99 = 100 − 1 при умножении на 99.

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

 M \times \,^{\prime\prime} 0 \; 0 \; 1 \; 1 \; 1 \; 0 \; 1 \; 0 \,^{\prime\prime} = M \times (2^5 + 2^4 + 2^3 + 2^1) = M \times 58

 M \times \,^{\prime\prime} 0 \; 1 \; 0 \; 0 \mbox{-1} \; 0 \; 1 \; 0 \,^{\prime\prime} = M \times (2^6 - 2^3 + 2^1) = M \times 58.

А.Б. следует этой схеме путем выполнения сложения, когда встречается первая цифра блока единиц (0 1), и вычитания, когда встречается конец блока единиц (1 0). Схема работает в том числе и для отрицательного множителя. Когда единицы в можителе сгруппированы в длинные блоки, алгоритм Бута выполняет меньше сложений и вычитаний, чем обычный алгоритм умножения.

Loading

Календарь

«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930

Архив записей

Друзья сайта

  • Заказать курсовую работу!
  • Выполнение любых чертежей
  • Новый фриланс 24