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