Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Нещо забих
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=207
Страница 1 от 1

Автор:  Реконструктор [ Сря Дек 08, 2004 2:33 pm ]
Заглавие:  Нещо забих

Как да направя целочислено умножение по коефициент без да използвам страшната операция делене?
Тоест, нещо такова:
koef = 0.99;
num = 1000 * koef;

но трябва да е целочислено, т.е. горното е еквивалентно на

koef = 99;
num = (1000 * koef) / 100;

обаче има делене

доста просто, но не мога да загрея вече 20 мин., деба

Автор:  Реконструктор [ Сря Дек 08, 2004 2:36 pm ]
Заглавие: 

Да допълня, че няма ограничения за смятане на коефициента, т.е. може да има и делене и логаритми и квото трябва. Въпроса е после като се умножава по него да се използва делене.

Автор:  Реконструктор [ Сря Дек 08, 2004 2:47 pm ]
Заглавие: 

А, оправих се. :) Не е максимално точно, но става. Интересна ли ви е темата или да трия?

Автор:  Ники [ Сря Дек 08, 2004 3:26 pm ]
Заглавие: 

едно тъпо предложение, след като ти е готов коефицента, умножаваш по 256 примерно (или 2 на ента степен) и след като си направил умножението по коефицента във формулата в която го ползваш, махаш последния байт все едно си разделил с 256 (ако преди това толкова си използвал), не винаги е точно но върши добра работа

Автор:  bateAz [ Сря Дек 08, 2004 3:30 pm ]
Заглавие: 

Ако, както е в твоя пример, коефициентът ти е близо до 1, по-удобно е да го представиш като "1-нещо си". За онова "нещо си" забележката на Ники е точно на място.

Автор:  Реконструктор [ Сря Дек 08, 2004 3:44 pm ]
Заглавие: 

Ники написа:
едно тъпо предложение, след като ти е готов коефицента, умножаваш по 256 примерно (или 2 на ента степен) и след като си направил умножението по коефицента във формулата в която го ползваш, махаш последния байт все едно си разделил с 256 (ако преди това толкова си използвал), не винаги е точно но върши добра работа


Точно така го направих. :)

nBinFactor = (nFactor << 16) / 1000
nResult = (nNumber * nBinFactor) >> 16;

като фактора е 0..1000

Автор:  ToHu [ Сря Дек 08, 2004 9:33 pm ]
Заглавие: 

Ами това е единиа вариант ..... който казва ники, защотот това т е само въртене наляво или надясно /умножението и деленето ако е степенна 2/, другия вариант е ако имаш формули просто да ги преобразуваш примерно ..... пример твоя случай ... 1000*коеф, това си е просто 10*коеф, като коеф вече е цяло число (1000/100)... не е ли така ... вс. софтуеристи свикнали да работят на РС имат навика да пиат целите формули дори тогава когат използват константи, много по добре за едночиповите решения е да се извършат всички възможни сметки предварително когато пишеш програмата, или ако все пак не са константи, но по рядко се променят, или се променят само в една част от програмата по добре там да смяташ някакъв резултат който после само да ползваш . така доста с еускорява процеса ... а и се намаля обема на програмата

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/