Einzelnen Beitrag anzeigen

gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#4

Re: Überlauf bei Berechnung erkennen

  Alt 22. Mai 2008, 22:37
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.

Delphi-Quellcode:
var
  x,y,c,z: longint;
  ovr: boolean;
begin
  x := $3FFFFFFF;
  y := $3FFFFFFF;
  c := 2;
  {ovr=true wenn x+y+c Overflow produziert, Ref. Hacker's Delight 2-12}
  z := (not (x xor y)) and $80000000;
  ovr := (z and (not ((x xor z) + y + c) xor y)) <> 0;
  writeln(x+y+c, ' Overflow: ', ovr);
end.
Was ist eigentlich mit {$Q+}, Du hast nur {$R+}.

Gruß Gammatester
  Mit Zitat antworten Zitat