Извлечение корня 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
→ Ссылка