Deine neuen Routinen haben noch einen schweren Fehler, denn sie arbeiten nur richtig für positive Integer, zB ergibt 16 div (-3) den Wert 251! Außerdem kann man sie noch drastisch vereinfachen (wenn Du nicht gleich ein kombiniertes div-mod berechnen willst), zB
Delphi-Quellcode:
function HugeIntDivCard(A: HugeInt; B: cardinal): HugeInt;
var
I: integer;
R: cardinal;
begin
R:= 0;
FillChar(Result, SizeOf(HugeInt), 0);
I:= HugeIntSize-1;
while (I > 0)
and (A[I] = 0)
do Dec(I);
while I >= 0
do begin
R:= 256*R + A[I];
Result[I]:= R
div B;
R:= R
mod B;
Dec(I);
end;
end;
function HugeIntModCard(A: HugeInt; B: cardinal): cardinal;
var
I: integer;
begin
Result:= 0;
I:= HugeIntSize-1;
while (I > 0)
and (A[I] = 0)
do Dec(I);
while I >= 0
do begin
Result:= (256*Result + A[I])
mod B;
Dec(I);
end;
end;
Falls Du wirklich Integer brauchst, müssen neben dem Aufruf der ...Card-Routinen noch die Vorzeichen betrachtet werden. Weiterhin darf B nicht zu groß sein (kleiner 2^24), sonst gibt es einen Overflow und man muß in den Schleifen mit Int64 rechnen.