| Микроконтролери и електроника 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 ] | |||||||||
| Заглавие: | ||||||||||
Точно така го направих. 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/ |
|