У меня 128-разрядное целое число без знака A и 64-разрядное целое число без знака B. Какой самый быстрый способ вычисления A % B
- это (64-разрядное) остаток от деления A на B?
Я хочу сделать это на языке C или ассемблере, но мне нужно ориентироваться на 32-битную платформу x86. К сожалению, это означает, что я не могу воспользоваться преимуществами поддержки компилятора для 128-разрядных целых чисел или способности архитектуры x64 выполнять требуемую операцию в одной инструкции.
Edit:
Спасибо за ответы до сих пор. Тем не менее, мне кажется, что предлагаемые алгоритмы будут довольно медленными - разве самый быстрый способ выполнить 128-разрядное 64-разрядное деление состоит в том, чтобы использовать встроенную поддержку процессора для 64-разрядного 32-разрядного деления? Кто-нибудь знает, есть ли способ выполнить большее деление с помощью нескольких меньших делений?
Re: Как часто меняется B?
Прежде всего меня интересует общее решение - какие вычисления вы бы выполнили, если бы А и В каждый раз отличались?
Однако вторая возможная ситуация заключается в том, что B не так часто меняется, как A - их может быть целых 200, чтобы делить на B. Как ваш ответ будет отличаться в этом случае?