Знаковое умножение алгоритмом Бута

Тема в разделе "WASM.A&O", создана пользователем AssemblerIA64, 29 мар 2008.

  1. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    Расскажите, пожалуйста, в подробностях, как работает этот алгоритм, а также почему.
    Искал в yandex'е и google, но либо ничего нет, либо не наглядно как-то.
     
  2. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Пусть множимое равно –41=1111111111010111b. Если переписать это число в виде сумм и разностей целых, содержащих только единицы, получим следующее двоичное представление числа –41= 1111111111111111 - 111111 + 11111 - 1111 + 111
    Так как 11111b= 2^5—1, то можем записать -41= 10000000000000000 - 1 - 1000000 + 1 + 100000 - 1 - 10000 + 1 + 1000 - 1= 10000000000000000 - 1000000 + 100000 - 10000 + 1000 - 1 Так как у нас 16-разрядное число — пренебрегаем 17-битным значением 2^16, тогда –41= 1111111111010111b= –2^6+2^5–2^4+2^3–2^0. Теперь произведение –41*m можно представить как: –2^6*m+2^5*m –2^4*m +2^3*m – 2^0*m. Произведение числа на 2^n эквивалентно сдвигу числа на n разрядов влево. При использовании алгоритма Бута операции сложения и вычитания требуются только когда во множимом не совпадают значения в соседних разрядах, то есть, имеется переход от 0 к 1 или от 1 к 0.
     
  3. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    Благодарю.