Эффективный (циклично) алгоритм для вычисления по модулю 25? - PullRequest
10 голосов
/ 11 июня 2009

У меня есть код, в котором я вычисляю x% 25. x всегда принимает положительное значение, но его динамический диапазон велик.

Я обнаружил, что этот конкретный фрагмент кода вычисления x% 25 занимает большие циклы. Мне нужно оптимизировать его.

Предварительно вычисленная таблица поиска исключена из-за возможного большого объема памяти таблицы.

В качестве второго подхода я кодировал фрагмент ниже (код C) -

mod(a, b)
{   
    int r = a;  
    while(r >= b)
    {      
        r = r - b;
    }   
    return r;
}

1.) Как я могу оптимизировать этот код для циклов (сжать его до максимума)?

2.) Есть ли какой-то совершенно другой оптимизированный способ достижения x% 25 (я знаю, что это не обычная операция, но все же, в поисках умных входов, которые люди могли бы использовать в своем опыте, которые могли бы мне помочь.) *

Спасибо.

-AD

EDIT:

Я думаю, что при использовании собственного оператора по модулю% в C внутренне используется операция деления (/), которая является дорогостоящей на процессоре, который я использую. (Нет команды div). следовательно, пытаясь понять, может ли пользовательская реализация превзойти внутренние вычисления, используя оператор%.

-AD

Ответы [ 21 ]

0 голосов
/ 11 июня 2009

Как насчет:

int y = 0, x = (x & 0x7f); 
while (x > 25) { x -= 25; y++; }

Обновление: это довольно неправильно :) Но идея есть.

...