Отправляет email-рассылки с помощью сервиса Sendsay

За 2005-05-27

Re: Задача

Hello Serge,

Thursday, May 26, 2005, 10:46:36 PM, you wrote:

SPP> При разработке вечного двигателя возникла следующая задача:

SPP> Есть два хитро-представленных числа с дробной частью, размером с байт, и
SPP> нужно их перемножить в микроконтроллере без аппаратного перемножителя за
SPP> минимальное время.

SPP> Числа выглядят так:

SPP> старшие четыре бита этого байта - это целая часть, младшие 4 бита-
SPP> дробная часть (количество 1/16-х).

SPP> 0 = 0000 0000 (в двоичном представлении),
SPP> 1 = 0001 0000,
SPP> 2 = 0010 0000,
SPP> 1.5 = 0001 1000 (то есть, 1.5+1.5=3, то есть 0011 0000).

SPP> Это же числа могут быть представлены в двухбайтном виде (старший байт -
SPP> целая часть, младший - дробная, то есть 1= 0000 0001, 0000 0000), не
SPP> важно. Важно то, что если 1 * 1, то это должно быть 1, а 2 * 2 = 4
SPP> соответственно, 1 * 1.5 = 1.5, 2 * 1.5 = 3 и т.п. Это коэффициенты
SPP> скорости, которые нужно перемножить. Что посоветуете? Тупо перемножать
SPP> два байта в таком представлении, а потомделить на 16 (сдвигать 4 раза),
SPP> или может есть более изящное решение?

Я отвечу с точки зрения медицины. Возьми побольше нейростимулятора ( в
твоём случае пиво)и тогда прогноз будет благоприятный

   2005-05-27 20:28:30 (#374788)

Задача

Вот первые реплики из ЖЖ:

Орлов: Называется фиксированная точка, обрабатывается как целое, за
порядком приходится следить руками. Соответственно просто перемножить
байты оптимизированной под этот контроллер процедурой, или не мороча
голову на С написать.

rhombl4: да, так имхо оптимальнее всего. после перемножения производить
сдвиг на длинну дробной части исходного числа. Т.е. в первом случае на 4
знака, во втором на байт.

anonimous: если есть память - то табличка на 64Kb

   2005-05-27 12:15:45 (#374559)