Отговори на тема  [ 7 мнения ] 
Нещо забих 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение Нещо забих
Как да направя целочислено умножение по коефициент без да използвам страшната операция делене?
Тоест, нещо такова:
koef = 0.99;
num = 1000 * koef;

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

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

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

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


Сря Дек 08, 2004 2:33 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Да допълня, че няма ограничения за смятане на коефициента, т.е. може да има и делене и логаритми и квото трябва. Въпроса е после като се умножава по него да се използва делене.


Сря Дек 08, 2004 2:36 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
А, оправих се. :) Не е максимално точно, но става. Интересна ли ви е темата или да трия?


Сря Дек 08, 2004 2:47 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение 
едно тъпо предложение, след като ти е готов коефицента, умножаваш по 256 примерно (или 2 на ента степен) и след като си направил умножението по коефицента във формулата в която го ползваш, махаш последния байт все едно си разделил с 256 (ако преди това толкова си използвал), не винаги е точно но върши добра работа


Сря Дек 08, 2004 3:26 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Ако, както е в твоя пример, коефициентът ти е близо до 1, по-удобно е да го представиш като "1-нещо си". За онова "нещо си" забележката на Ники е точно на място.


Сря Дек 08, 2004 3:30 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Ники написа:
едно тъпо предложение, след като ти е готов коефицента, умножаваш по 256 примерно (или 2 на ента степен) и след като си направил умножението по коефицента във формулата в която го ползваш, махаш последния байт все едно си разделил с 256 (ако преди това толкова си използвал), не винаги е точно но върши добра работа


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

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

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


Сря Дек 08, 2004 3:44 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

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


Сря Дек 08, 2004 9:33 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 7 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: Google [Bot] и 7 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни