Junior
Статус: Не в сети Регистрация: 09.10.2006 Откуда: Николаев
Добрый день! надеюсь подразделом не сильно ошибся, все таки достаточно около-программерская тематика. в общем в чем вопрос: хочу узнать как умножать знаковые двоичные числа с фиксированной запятой, что я уже вычитал и обнаружил. например, есть два числа 7,625 и -5,125. пока откинем знаки, двоичное представление чисел 111.101 и 101.001 соответственно (точку поставил чисто условно, для отделения целой от дробной части), умножим:
111101 x101001 --------- ................ -------------- 100111.000101 ~= 39,00097 (большую ошибку в дробной части спишем на не точность при первичном переводе из десятичной в двоичную)
т.е. все выходид более менее красиво. но при попытках перемножить знаковое число я зашел в тупик: я пробовал переводить отрицательное число в дополнительный код, переводить оба числа в доп. код, потом результат обратно в прямой и уже его в десятичное число, и всегда выходило что-то левое. Буду очень благодарен за точную методику или место, где про это можно прочесть.
пробовал переводить отрицательное число в дополнительный код, переводить оба числа в доп. код, потом результат обратно в прямой и уже его в десятичное число, и всегда выходило что-то левое.
В общем-то методика зависит от того, в каком виде предоставляются исходные числа (прямой код с использованием старшего бита под знак числа или дополнительный код) и какие команды возможно использовать для реализации алгоритма. Если имеется прямой код с отдельным битом знака, то бит знака игнорируется (представляется нулем) и производится обычное умножение, а затем добавляется бит знака, определяемый xor'ом. Если имеется дополнительный код, то можно перевести в прямой, перемножить в прямом коде, определить знак результата и по этому знаку судить, надо ли переводить в обратный код. Как вариант для дополнительного кода - можно почитать документ под названием avr200 (227 кб), например. Там изложены некоторые алгоритмы умножения/деления. Можно просто почитать об алгоритме Booth'а.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения