Forum: Programmieren allgemein
by gammatester,
22. Mai 2008
Das Carry kann doch nicht negativ sein! Alle 32-Bit-Teile (bis auf das Werthöchste) müssen doch unsigned berechnet werden. Das Carry kann bei Additionen nur 0 oder 1 sein.
Deine Interpretation von Q+ ist übrigens nicht richtig. Delphi-Hilfe: The $Q directive controls the generation of overflow checking code. In the {$Q+} state, certain integer arithmetic operations (+, -, *, Abs, Sqr, Succ,...
Forum: Programmieren allgemein
by gammatester,
22. Mai 2008
Hier ein Stück Code, das Overflow detektiert für longints. Ein Problem ist: wenn Delphi-Overflowcheck an ist, darf x+y+c nicht berechnet werden, wenn ovr=true ist.
Weiter solltest Du T.Hi auswerten nach der Schleife, wenn's <>0 ist hast Du mit Sicherheit einen Overflow.
var
x,y,c,z: longint;
ovr: boolean;
begin
x := $3FFFFFFF;
y := $3FFFFFFF;
Forum: Programmieren allgemein
by gammatester,
22. Mai 2008
Durch Deine Beitrage im anderen Thread nehme ich an, daß Deine TBigInt eine fixe Maximalgröße haben, sonst würde sich das Overflowproblem anders stellen.
Ohne Definition der Typen kann man allerding nix genaues sagen.
Z.B. verstehe ich das 'Geeiere' mit LongInt(Data) < 0, Abs(Self) >/< Abs(i) nicht. Insbesondere Data and $80000000 <> 0 sollte doch das gleiche sein wie LongInt(Data) < 0 ???...