faq:delphi [Sven-Of-Nine]

Delphi

Wieso löst trunc,floor,round eine Exception EInvalidOp aus ?

Die einfache Antwort auf die Frage ist :
Trunc löst diese Excpetion nicht aus!

Zur Erklärung :
Wenn eine unerlaubte Floatingpoint-Operation ausgeführt wird, setzt die FPU das Exception-Flag. In Delphi wird parallel dazu das Exceptionhandling eingeschaltet, auch wenn es vorher deaktiviert war. Bei der nächsten Gleitkommaoperation wird nun das Exceptionflag ausgewertet und eine entsprechende Fehlermeldung generiert.
z.B. führt folgender Code zu diesem Verhalten

a,b,c,d : single;

a := 10;
b := 0;
c := 25;

b := b / a; // Hier wird der Fehler erzeugt
d := Trunc( a * c ); // Hier wird der Fehler ausgegeben

Es bringt also nichts im Trunc nach dem Problem zu suchen. Die letzte Operation davor ist der eigentliche Schuldige.


faq/delphi.txt · Zuletzt geändert: 2011/02/08 17:53 von Sven Of Nine