Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 3 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Junior
Статус: Не в сети
Регистрация: 09.10.2006
Откуда: Николаев
Добрый день!
надеюсь подразделом не сильно ошибся, все таки достаточно около-программерская тематика.
в общем в чем вопрос: хочу узнать как умножать знаковые двоичные числа с фиксированной запятой, что я уже вычитал и обнаружил.
например, есть два числа 7,625 и -5,125.
пока откинем знаки, двоичное представление чисел 111.101 и 101.001 соответственно (точку поставил чисто условно, для отделения целой от дробной части), умножим:

111101
x101001
---------
................
--------------
100111.000101 ~= 39,00097 (большую ошибку в дробной части спишем на не точность при первичном переводе из десятичной в двоичную)

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



Партнер
 

Member
Статус: Не в сети
Регистрация: 04.10.2004
Psihonavt писал(а):
100111.000101 ~= 39,00097
100111.000101 = 39.078125
Psihonavt писал(а):
пробовал переводить отрицательное число в дополнительный код, переводить оба числа в доп. код, потом результат обратно в прямой и уже его в десятичное число, и всегда выходило что-то левое.
В общем-то методика зависит от того, в каком виде предоставляются исходные числа (прямой код с использованием старшего бита под знак числа или дополнительный код) и какие команды возможно использовать для реализации алгоритма.
Если имеется прямой код с отдельным битом знака, то бит знака игнорируется (представляется нулем) и производится обычное умножение, а затем добавляется бит знака, определяемый xor'ом.
Если имеется дополнительный код, то можно перевести в прямой, перемножить в прямом коде, определить знак результата и по этому знаку судить, надо ли переводить в обратный код.
Как вариант для дополнительного кода - можно почитать документ под названием avr200 (227 кб), например. Там изложены некоторые алгоритмы умножения/деления. Можно просто почитать об алгоритме Booth'а.


 

Junior
Статус: Не в сети
Регистрация: 09.10.2006
Откуда: Николаев
maco
спасибо за ответ


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 3 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan