![]() |
eXeL@B —› Программирование —› Оптимизация (int * int) div int |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 06 июля 2009 16:58 · Поправил: LKS128 · Личное сообщение · #1 Имеется процедура написанная на дельфях. Общий вид: Code:
i := (i * j) div 255; Эта операция жрёт половину времени процедуры. Замена на i := round((i * j) / 255); немного улучшает ситуацию, но не намного. Есть ли какие-нибудь варианты оптимизации? ![]() |
|
Создано: 14 июля 2009 15:31 · Поправил: multiarc · Личное сообщение · #2 Вот например как можно умножить быстро int на int (пример для умножения на 34) Code:
фактически мы просто умножаем по частям, сначала на 32, потом на 34-32, т.е. 2. для любого другого числа просто можно посмотреть какие выставлены биты и по похожей технике умножать на любое число, т.е. любой int. ![]() |
|
Создано: 15 июля 2009 17:59 · Личное сообщение · #3 Jupiter пишет: прилагаю тулзу Magic Divider, созданную The Svin (я эту тулзу малость причесал) Кстати рекомендую использовать оригинальную утилиту от The Svin. Не знаю что там Jupiter правил кроме интерфейса, но результаты правленный вариант выдаёт неправильные в отличии от оригинала. Деление на 10. The Svin version: Code:
Jupiter version: Code:
Это если ввести вначале делитель 10000, а потом делитель 10 - будет такая ерунда. При первом вычислении всё Ок. И плюс оригинал с исходниками распространяется. ;) ![]() |
|
Создано: 16 июля 2009 10:25 · Личное сообщение · #4 cppasm спасиб за отчёт, баг поправил ![]() ----- EnJoy! ![]() |
|
Создано: 17 июля 2009 10:36 · Личное сообщение · #5 |
|
Создано: 17 июля 2009 10:45 · Личное сообщение · #6 |
<< . 1 . 2 . |
![]() |
eXeL@B —› Программирование —› Оптимизация (int * int) div int |