Деление через умножение на обратное число
Буду очень признателен.
Буду очень признателен.
Если тебя интересует сам алгоритм, то смысл его сводится к следующему: операцию деления Z/D можно заменить на умножение Z*(1/D). Весь вопрос в том, как определить 1/D. Для этого используются два метода - разложение в ряд Тейлора и метод Ньютона-Рафсона.
Первый: D=1+X, тогда 1/D = (1-X)*(1+X^2)*(1+X^4)*(1+X^8)*(1+X^16)*...
Второй сводится к решению уравнения f(X) = 1/X - D = 0, т.е. X = 1/D, которое может быть найдено с помощью реккурентного соотношения
X(i+1) = X(i)*(2-X(i)D).
Первый: D=1+X, тогда 1/D = (1-X)*(1+X^2)*(1+X^4)*(1+X^8)*(1+X^16)*...
Второй сводится к решению уравнения f(X) = 1/X - D = 0, т.е. X = 1/D, которое может быть найдено с помощью реккурентного соотношения
X(i+1) = X(i)*(2-X(i)D).
все проще мне нужно просто разделить двоичную "1" на делитель, и потом сдвинуть дробную часть - в сектор целой, и полученное двоичное целое умножить на делимое ))
Так действительно проще. Только как ты будешь делить 1 на делимое?
так - как еслибы это было число с плавающей точкой: например 1/2 будет выглядеть 0000.1000 - теперь сдвину дробную часть в область целой, и умножу делимое на 1000 ))
Если тебя это устраивает, то замечательно... Просто это совсем не замена деления умножением.
Меня ничего не смущает - это твоя задача, и тебе реализовывать ее так, как тебе удобнее. Только я повторюсь - тот метод, что ты предложил, не есть метод замены деления умножением, потому что такой метод замены предполагает НЕ использование операции деления вообще, а у ты собираешься использовать "обычное двоичное деление". Т.е. ты просто заменяешь одну операцию деления - двумя, одна из которых тоже деление. Может, с сумме они и дадут выигрыш по времени/производительности, ни это уже зависит от реализации.