Реализовать по модулю, используя битовые сдвиги?
Я пишу некоторый код для очень ограниченной системы, где оператор мод очень медленный. В моем коде модуль нужно использовать примерно 180 раз в секунду, и я подумал, что его максимально возможное удаление значительно увеличило бы скорость моего кода, так как сейчас один цикл моего основного цикла не выполняется за 1/60 второй, как и должно быть. Мне было интересно, если бы было возможно повторно реализовать модуль, используя только битовые сдвиги, как это возможно с умножением и делением. Итак, вот мой код на C ++ (если бы я мог выполнить модуль по сборке, это было бы еще лучше). Как я могу удалить по модулю, не используя деление или умножение?
while(input > 0)
{
out = (out << 3) + (out << 1);
out += input % 10;
input = (input >> 8) + (input >> 1);
}
EDIT: На самом деле я понял, что мне нужно делать это более 180 раз в секунду. Видя, как значение ввода может быть очень большое число до 40 цифр.