Комментарии 4
А вы считали, сколько раз у вас там
требуется "fine tuning" --- последовательное прибавление или вычитание единицы
Это важно, ведь, наличие в коде вот этого цикла делает все проверки на корректность бесполезными. Этот цикл ЛЮБОЙ алгоритм рано или поздно выправит:
while (do_dec || do_inc) {
Я добавил в ваш исходник отслеживание, сколько раз этот цикл выполняется. Вроде как максимум один раз, но вот вопрос - почему?
Часто одного шага достаточно. Почему? Потому что до этого сделано довольно точное приближение. Математически я не доказывал, это чисто инженерный подход, комбинирование математики, подбора и тестирования.
Весь смысл был - найти достаточно точную коррекцию к тривиальному частному A/C, использующую более простые операции. Она была найдена)
Весьма напоминает обычное рекурсивное деление - https://maths-people.anu.edu.au/~brent/pd/mca-cup-0.5.9.pdf (RecursiveDivRem). Оно в GMP используется, к примеру.
Алгоритм деления 2W-разрядных чисел с использованием операций с числами разрядностью W