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