![]() |
Warum keine Exception bei Division durch 0
Hallo,
ich bastle an einem größeren Projekt, und hab irgendwie einen Fehler im Code, was höchstwahrscheinlich durch eine Division durch 0 zurückzuführen ist. Deshalb hab ich jetzt einmal testweise folgenden Code probiert:
Delphi-Quellcode:
rsp.
procedure TForm1.cmdNullClick(Sender: TObject);
var mu : double ; begin mu := 5/0 ; end;
Delphi-Quellcode:
Jetzt wundere ich mich aber, warums nicht knallt, wenn der Code ausgeführt. es passiert rein garnichts, und eventuell folgender Code wird normal weiter ausgeführt. Wieso gibts da keine Exception? Stattdessen zeigt ein
procedure TForm1.cmdNullClick(Sender: TObject);
var mu : double ; begin mu := 0/0 ; end;
Delphi-Quellcode:
mir ein INF an, ein
showmessage (FloatToStr(5/0)) ;
Delphi-Quellcode:
ein NAN. Mathematisch ist wohl klar, aber mein gutes alte Turbo Pascal hat da immer eine Laufzeitfehlermeldung ausgegeben. Ich hab in den Delphi Einstellung bischen gekuckt, aber nirgends einen Schalter gefunden, der dieses Verhalten erklärt.
showmessage (FloatToStr(0/0)) ;
Gruß, Tom |
Re: Warum keine Exception bei Division durch 0
Ich glaub Delphi knallt nur raus, wenn du das mit nem Interger versuchst... Float / Double müsste gehen... Oder täusch ich mich da jetzt?
|
Re: Warum keine Exception bei Division durch 0
Ist bei Fließkommazahlen schon richtig so. Such mal hier nach
![]() |
Re: Warum keine Exception bei Division durch 0
Hmm. Gibts denn ne Möglichkeit, via Compilerschalter o.ä. trotzdem ne Exception herbeizurufen. Hintergrund des Ganzen ist eine Monte Carlo Simulation, welche (wie es mir scheint), zu 99,999% und mehr funktionniert, nur ab und zu mir mit dieser Division durch 0 Probleme machen könnt. Bin halt noch auf der Fehlersuche... Ich halt vermeiden, bei jeder Division ein if...then...else zu schreiben, weil mir das definitiv zu aufwendig wird. Die ganze Simulation hat mittlerweilen paar tausend Zeilen Code, wo solche Division theoretisch relativ oft auftreten können... Zeile für Zeile das Ganze zu debuggen macht keinen Sinn, weil die ganze Rechnung ja zu 99,999% funktioniert.
|
Re: Warum keine Exception bei Division durch 0
Achja. Mit diesem Problem kämpfe ich auch schon längere Zeit und habe noch keine Lösung gefunden. Man kann mal probieren das ControlWord der FPU zu ändern. Geht relativ einfach mit der JCL. Weiss jetzt nicht, wie die Unit/Funktion genau heisst aber glaube irgendwas mit 8087.
|
Re: Warum keine Exception bei Division durch 0
Zitat:
Was bitte schön ist ein Controlword und eine FPU? |
Re: Warum keine Exception bei Division durch 0
Damit das Programm nur noch auf einer CPU läuft ? Ich würde einen anderen Zahlentyp testen: BCD oder so ähnlich. Mußt halt suchen. :mrgreen:
|
Re: Warum keine Exception bei Division durch 0
Okay. FPU bedeutet Floating Point Unit und ist quasi die CPU für alle Gleitkommaberechnungen (ist natürlich in der CPU integriert). Durch das ControlWord kann die FPU gesteuert werden, was denn bei Fehlern wie Division durch 0 passieren soll.
|
Re: Warum keine Exception bei Division durch 0
Dein Beispiel-Code wird gar nicht ausgeführt. Der Compiler ist ja nicht blöd, er sieht, dass du die Varaible nie benutzt und optimiert sie weg.
|
Re: Warum keine Exception bei Division durch 0
Prüf doch einfach ob die Zahl <> 0 ist, dann brauchste auch keine Exception mehr :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz