Jump to content

Алгоритм умножения Бута

(Перенаправлено из кодировки Бута )

Алгоритм умножения Бута — это алгоритм умножения , который умножает два двоичных числа со знаком в записи дополнения до двух . Алгоритм в 1950 году во время был изобретен Эндрю Дональдом Бутом исследования кристаллографии в Биркбек-колледже в Блумсбери , Лондон . [1] Алгоритм Бута представляет интерес для изучения компьютерной архитектуры .

Алгоритм

[ редактировать ]

Алгоритм Бута исследует соседние пары бит 'N'-битного множителя Y в представлении дополнения до двух со знаком , включая неявный бит ниже младшего бита , y −1 = 0. Для каждого бита y i , для i от 0 до N биты y i и y i −1 − 1, рассматриваются . Если эти два бита равны, аккумулятор произведения P остается неизменным. Где y i = 0 и y i −1 = 1, множимое, умноженное на 2 я добавляется к P ; и где y i = 1 и y i−1 = 0, множимое, умноженное на 2 я вычитается П. из Конечное значение P — это подписанное произведение.

Представления множимого и произведения не указаны; обычно они оба также представлены в виде дополнения до двух, например, множитель, но подойдет любая система счисления, поддерживающая сложение и вычитание. Как указано здесь, порядок шагов не определен. Обычно он переходит от LSB к MSB , начиная с i = 0; умножение на 2 я затем обычно заменяется постепенным сдвигом аккумулятора P вправо между шагами; младшие биты могут быть смещены, а последующие сложения и вычитания могут выполняться только для старших N битов P . [2] Существует множество вариаций и оптимизаций этих деталей.

Алгоритм часто описывается как преобразование строк из единиц в множителе в старший +1 и младший -1 на концах строки. Когда строка проходит через старший бит, старшего +1 нет, и конечным эффектом является интерпретация как отрицательное значение соответствующего значения.

Типичная реализация

[ редактировать ]
Walther WSR160 Арифмометр 1960 года выпуска. Каждый поворот рукоятки добавляет (вверх) или вычитает (вниз) операнд, установленный в верхнем регистре, из значения в регистре аккумулятора внизу. Сдвиг сумматора влево или вправо умножает эффект на десять.

Алгоритм Бута может быть реализован путем многократного добавления (обычным двоичным сложением без знака) одного из двух заранее определенных значений и S к продукту P , а затем выполнения арифметического сдвига вправо P. A Пусть 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 . Заполните младший значащий (крайний правый) бит нулем.
  2. Определите два младших (крайних правых) бита P .
    1. они равны 01, найдите значение P + A. Если Игнорируйте любое переполнение.
    2. их 10, найдите значение P + S. Если Игнорируйте любое переполнение.
    3. Если они равны 00, ничего не делайте. Используйте P непосредственно на следующем шаге.
    4. Если их 11, ничего не делайте. Используйте P непосредственно на следующем шаге.
  3. Арифметически сдвиньте значение, полученное на 2-м шаге, на одну позицию вправо. Пусть P теперь равно этому новому значению.
  4. Повторяйте шаги 2 и 3, пока они не будут выполнены y раз.
  5. Отбросьте младший (крайний правый) бит из P . Это произведение m и r .

Найдите 3 × (−4), где m = 3 и r = −4, x = 4 и y = 4:

  • м = 0011, -м = 1101, г = 1100
  • А = 0011 0000 0
  • С = 1101 0000 0
  • Р = 0000 1100 0
  • Выполните цикл четыре раза:
    1. Р = 0000 110 0 0 . Последние два бита — 00.
      • P = 0000 0110 0. Арифметический сдвиг вправо.
    2. П = 0000 011 0 0 . Последние два бита — 00.
      • P = 0000 0011 0. Арифметический сдвиг вправо.
    3. Р = 0000 001 1 0 . Последние два бита равны 10.
      • Р = 1101 0011 0. Р = Р + С.
      • P = 1110 1001 1. Арифметический сдвиг вправо.
    4. Р = 1110 100 1 1 . Последние два бита равны 11.
      • P = 1111 0100 1. Арифметический сдвиг вправо.
  • Произведение: 1111 0100, что равно −12.

Вышеупомянутый метод неадекватен, когда множимое является самым отрицательным числом , которое может быть представлено (например, если множимое имеет 4 бита, то это значение равно -8). Это происходит потому, что тогда происходит переполнение при вычислении -m, отрицания множимого, которое необходимо для установки S. Одним из возможных решений этой проблемы является расширение A, S и P на один бит каждый, при этом они все еще представляют одно и то же число. То есть, хотя ранее -8 было представлено в четырех битах по 1000, теперь оно представлено в 5 битах по 11000. Далее следует реализация, описанная выше, с изменениями в определении битов A и S; например, значение m , первоначально присвоенное первым x битам A, теперь будет расширено до x +1 битов и присвоено первым x +1 битам A. Ниже улучшенный метод демонстрируется путем умножения −8 на 2, используя 4 бита для множимого и множителя:

  • А = 1 1000 0000 0
  • С = 0 1000 0000 0
  • Р = 0 0000 0010 0
  • Выполните цикл четыре раза:
    1. п знак равно 0 0000 001 0 0 . Последние два бита — 00.
      • P = 0 0000 0001 0. Сдвиг вправо.
    2. Р знак равно 0 0000 000 1 0 . Последние два бита равны 10.
      • Р = 0 1000 0001 0. Р = Р + С.
      • P = 0 0100 0000 1. Сдвиг вправо.
    3. п знак равно 0 0100 000 0 1 . Последние два бита — 01.
      • Р = 1 1100 0000 1. Р = Р + А.
      • P = 1 1110 0000 0. Сдвиг вправо.
    4. П знак равно 1 1110 000 0 0 . Последние два бита — 00.
      • P = 1 1111 0000 0. Сдвиг вправо.
  • Произведение равно 11110000 (после отбрасывания первого и последнего бита), что равно -16.

Как это работает

[ редактировать ]

Рассмотрим положительный множитель, состоящий из блока единиц, окруженного нулями. Например, 00111110. Товар определяется следующим образом: где М – множимое. Количество операций можно сократить до двух, переписав то же, что и

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

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

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

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

См. также

[ редактировать ]
  1. ^ Бут, Эндрю Дональд (1951) [1950-08-01]. «Техника знакового двоичного умножения» (PDF) . Ежеквартальный журнал механики и прикладной математики . IV (2): 236–240. Архивировано (PDF) из оригинала 16 июля 2018 года . Проверено 16 июля 2018 г. Перепечатано в Бут, Эндрю Дональд . Техника знакового двоичного умножения . Издательство Оксфордского университета . стр. 100–104.
  2. ^ Чен, Чи-хау (1992). Руководство по обработке сигналов . ЦРК Пресс . п. 234. ИСБН  978-0-8247-7956-6 .

Дальнейшее чтение

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 77ffc68d27105835fc3a8e5f8e40e173__1711638900
URL1:https://arc.ask3.ru/arc/aa/77/73/77ffc68d27105835fc3a8e5f8e40e173.html
Заголовок, (Title) документа по адресу, URL1:
Booth's multiplication algorithm - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)