Извлечение корня n-ой степени в обход натурального логарифма
Имеется некоторое число x и степенной корень у. Нужно извлечь корень без использования натурального логарифма (Exp(Ln(X) / 3) и пр.). Желательно на Pascal, либо Delphi.
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Для вычисления корня y-й степени из X можно использовать алгоритм Ньютона.
Задать начальное приближение- например, r0 = 1.
Посчитать очередное приближение на основе предыдущего (r{i} означает подстрочник ri)
r{i} = (r{i-1}*(y-1) + X / r{i-1}^(y-1)) / y
Продолжать, пока два значения не будут отличаться не более, чем на заданную погрешность
function Root(value: Double; n: Integer): Double;
const
eps = 1E-10;
var
r, rr, pow: Double;
i, nm1: Integer;
begin
r := 1.0;
nm1 := n - 1;
repeat
pow := 1.0;
for i := 1 to nm1 do
pow := pow * r;
rr := (r * nm1 + value / pow) / n;
if abs(r - rr) <= eps then
Break;
r := rr;
until False;
Result := rr;
end;
begin
Memo1.Lines.Add(Root(8, 6).ToString); // sqrt(2)=1.4142135623731