Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#43

Re: Unbegrenzt viele Nachkommastellen

  Alt 16. Dez 2003, 10:56
Da die Implementierung von NSqrt() im Vergleich zu NRoot() im DEC so enorme performance Unterschiede aufweist, sollte folgender Code wesentlich schneller sein als obiger Code.

Delphi-Quellcode:
procedure NRoot(var R: IInteger; const A: IInteger; Root,Digits: Integer; Base: TBase = 10); overload;
// R = A^(1/Root) * Base^Digits
resourcestring
  sNRoot1 = 'NRoot(), invalid paramater Root, must be >= 2';
  sNRoot2 = 'NRoot(), invalid paramater Digits, must be >= 0';
var
  T: IInteger;
begin
  if Root < 2 then NRaise(@sNRoot1);
  if Digits < 0 then NRaise(@sNRoot2);
  NPow(T, Base, Digits);
  NPow(T, Root);
  NMul(R, T, A); // R = T * A
  while not Odd(Root) do
  begin
    NSqrt(R);
    Root := Root shr 1;
  end;
  if Root > 1 then NRoot(R, Root);
end;
Gruß Hagen
  Mit Zitat antworten Zitat