Помните, как вы научились делать длинное деление в школе?
Точно так же, но считайте до 64 КБ в каждой "цифре"
Если у вас есть только 32-битные операции, то вам нужно 2 "цифры", чтобы выполнить каждое умножение или деление и получитьзначение и остаток, так что вы делаете ваши цифры 16-битными, 64K.
[Обратите внимание, что некоторые процессоры не имеют 64x64 => 64-битную или 64/64 => 64-битную операцию, но имеют32x32 => 64 и 64/32 => 32r32, но будет сложно заставить компилятор C сгенерировать эти инструкции.]
Я позволю вам разобраться в деталях ...При необходимости сначала выполните десятичное разделение с использованием 4-значного деления и делителя.
Вы можете видеть, что это превращается во множество операций умножения и деления по сравнению с простым 32-разрядным делением.
Если вам просто нужно приближение, то вы можете просто сдвинуть оба 64-битных значения вниз, пока дивиденд не станет меньше 32-битного.
Чуть более точным является смещение делителя и дивиденда в 32-битное значение,и запомните количество сдвинутых битдля каждого делите деление, затем повторно применяйте смены.
Вы можете использовать этот приблизительный результат, чтобы получить лучший результат.Умножьте исходный делитель на результат и сравните его с исходным дивидендом.Если оно слишком высокое, попробуйте вычесть делитель только один раз.Если он слишком низкий, попробуйте добавить делитель только один раз.Если это дает лучший результат, уменьшите или увеличьте свой ответ соответствующим образом.