Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#6

AW: Überlauf bei Rechenoperation mitbekommen

  Alt 4. Apr 2014, 13:37
Was Du hier vorhast ist ja auch etwas merkwürdig.
Stimmt. Aber in dem speziellen Fall ist das "übliche" Verhalten gewollt (es ist ja auch die Standardeinstellung). Nur will ich es mitbekommen.

Das mit einem Int64 (bzw. allgemein größeren Zahl) ist es auch möglich (man prüft mit if ob Max überschritten wurde), ich hatte aber fixe Idee die Rechnung normal auszuführen und die Info vom System zu erhalten.

Das "Problem" ist, dass das eigentlich einfach zu lösen ist, also ein paar Dummy-Variablen usw. Nur so dumm ist der Compiler nicht. Wenn er er glaubt, dass eine Rechnung nicht nötig ist, und prüfen auf Error ist eigentlich unsinnig, dann ignoriert er die Routine.

//EDIT:

Also das kürzeste was ich hin bekomme (hier im Beispiel mit Byte) ist das:
Delphi-Quellcode:
function IncByte(var X: Byte; N: Byte = 1): Boolean;
  function IncTest: Boolean;
  begin
    Result := False;
    {$OverFlowChecks On}
    try
      Inc(X, N);
    except
      on EIntOverflow do
        Result := True;
    end;
  end;
var
  X2: Byte;
begin
  X2 := X;
  Result := IncTest;

  {$OverFlowChecks Off}
  if Result then
  begin
    X := X2;
    Inc(X, N);
  end;
end;
Es müssen zwei Funktionen sein, sonst klappt das nicht.

Geändert von Popov ( 4. Apr 2014 um 13:48 Uhr)
  Mit Zitat antworten Zitat