повторно реализовать по модулю, используя битовые сдвиги?

Я пишу код для очень ограниченной системы, где оператор мод работает очень медленно. В моем коде по модулю нужно использовать около 180 раз в секунду, и я полагал, что максимальное удаление его значительно увеличит скорость моего кода, поскольку на данный момент один цикл моего основного цикла не выполняется за 1/60 часть времени. второй как надо. Мне было интересно, можно ли повторно реализовать модуль, используя только битовые сдвиги, как это возможно с умножением и делением. Итак, вот мой код на С++ (если бы я мог выполнить модуль с использованием сборки, было бы еще лучше). Как я могу удалить модуль без использования деления или умножения?

    while(input > 0)
{
    out = (out << 3) + (out << 1);
    out += input % 10;

    input = (input >> 8) + (input >> 1);
}

РЕДАКТИРОВАТЬ:На самом деле я понял, что мне нужно делать это более 180 раз в секунду. Поскольку значение ввода может быть очень большим числом до 40 цифр.

13
задан PgrAm 18 June 2012 в 02:13
поделиться