Thema: HugeInt_Div

Einzelnen Beitrag anzeigen

Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: HugeInt_Div

  Alt 10. Jan 2012, 18:52
Was er macht, ist eigentlich ein mod auf div aufgepäppelt.

Auch dieses merkwürdige shl. Und am Anfang dache ich, er macht D shl -S, aber das fängt er ab.

Anyway, jedenfalls vielen Dank für dein Feedback und den Link.


Gruß
Thomas

Delphi-Quellcode:
procedure HugeInt_Mod(A, B: HugeInt; var R: HugeInt);
begin
  HugeInt_DivMod(A, B, R);
  Move(A, R, SizeOf(HugeInt));
end;


Edit: So würde es mir fast schon reichen:

Delphi-Quellcode:
function HugeIntModInteger(A: HugeInt; B: integer): integer;
var
  Q: HugeInt;
  I: integer;
begin
  Result:= 0;
  FillChar(Q, SizeOf(HugeInt), 0);
  I:= HugeIntSize-1;
  while (I > 0) and (A[I] = 0) do Dec(I);
  while I >= 0 do
  begin
    Result:= 256*Result + A[I];
    if I > 0 then
    begin
      Move(Q[0], Q[I], HugeIntSize-I);
      FillChar(Q[0], I, 0);
    end;
    Q[0]:= Result div B;
    Result:= Result mod B;
    Dec(I);
  end;
end;

function HugeIntDivInteger(A: HugeInt; B: integer): HugeInt;
var
  Q: HugeInt;
  I, R: integer;
begin
  R:= 0;
  FillChar(Q, 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];
    if I > 0 then
    begin
      Move(Q[0], Q[I], HugeIntSize-I);
      FillChar(Q[0], I, 0);
    end;
    Q[0]:= R div B;
    R:= R mod B;
    Dec(I);
  end;
  Move(Q, A, SizeOf(Q));
  Result:= A;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  ShowMessage(HugeIntToStr(HugeIntDivInteger(IntToHugeInt(50331648), 3)));
  ShowMessage(IntToStr(HugeIntModInteger(IntToHugeInt(50331648), 3)));
end;

Geändert von Bjoerk (10. Jan 2012 um 19:54 Uhr) Grund: Edit:
  Mit Zitat antworten Zitat