Начальная точка в алгоритме CORDIC
Я пытаюсь уменьшить количество итераций, необходимых для вычисления умножения с использованием алгоритма CORDIC, потому что я использую этот алгоритм в непрерывной функции для вычисления квадратной функции. Вот алгоритм, предполагающий -1<x<1'
function z=square(x)
y=x;
z=0;
for i=1:15
if (x > 0)
x = x - 2^(-i);
z = z + y*2^(-i);
else
x = x + 2^(-i);
z = z - y*2^(-i);
end
end
return
end
Я уже знаю значение, близкое к результату умножения (из предыдущего результата (назовите его pr
)) и стоимость x
(значение х непрерывно) . Помогает ли это в любом случае уменьшить количество итераций?
1 ответ
Если вы умножаете дважды на одну и ту же константу, скажем, a.x
а также a.x'
, то вы можете умножить и добавить с дельтой a.(x' - x)
, который имеет менее значимые цифры.
В случае, если оба фактора различаются, вы все равно можете использовать
x'.y' = (x'- x).(y' - y) + x.(y' - y) + (x' - x).y + x.y
где, может быть, первый термин является невосполнимым.
Для квадрата
x'² = (x'- x)² + 2.x.(x' - x) + x²