![]() |
Delphi-Version: 7
Ungewöhnliche ungültige Gleitkommaoperation
Liste der Anhänge anzeigen (Anzahl: 1)
Vielleicht kann mir ja jemand einen Tipp geben, was hier vorgeht.
Mit dem Einschließen in Try/Except macht das zwar keine Probleme, aber ich wüsste trotzdem gern, wodurch der Fehler verursacht wird und - wenn möglich - wie ich ihn von vornherein vermeiden kann. |
AW: Ungewöhnliche ungültige Gleitkommaoperation
Hast du mal versucht nur gegen 0 zu vergleichen, also ohne das ".0"?
Sherlock |
AW: Ungewöhnliche ungültige Gleitkommaoperation
Was ist nun eigentlich der Fehler?
Oder ist das "Ungewöhnliche ungültige Gleitkommaoperation" die Fehlermeldung? Und welchen Wert hat das Value und wo kommt der Wert her? (z.B. mit NaN lässt sich keine Zahl vergleichen) |
AW: Ungewöhnliche ungültige Gleitkommaoperation
Zitat:
Delphi-Quellcode:
kein Fehler, nichts!
procedure pp(t:tdatetime);
begin if t<=0.0 then begin t:=t+1; end; end; (ach ja t=now) Gruß K-H |
AW: Ungewöhnliche ungültige Gleitkommaoperation
Zitat:
Aber so lange in t eine "gültige" Fließkommazahl drin ist, gibt es keine Probleme. Außer nach einer Weile ein eventuelle "Überlauffehler", aber diese Prüfung ist ja standardmäßig deaktiviert. Zitat:
Gültig: - kein NaN, Infinity oder NegInfinity - keine defekter/ungültiger "Wert" (im Gegensatz, zum z.B. Integer, ergibt, auf binärer Ebene, nicht jede Bitkombination einen gültigen "Wert") - zwischen -MaxDouble und MaxDouble - und nahe 0 nicht kleiner als MinDouble (nicht zwischen -MinDouble und MinDouble) |
AW: Ungewöhnliche ungültige Gleitkommaoperation
Zitat:
Zitat:
|
AW: Ungewöhnliche ungültige Gleitkommaoperation
Nja, de Debugger zeigt die Werte nicht immer "optimal" an, ganz kleine Zahlen rundet der auch schonmal zu einer "glatten" 0
und vorallem mit "defekten" Werten kommt der nicht unbedingt klar. (wer konnt auch ahnen, daß sowas mal passieren könnte) Ist das denn wirklich eine 0.000000000000000... ? Was gibt der Code denn aus, wenn du ihn in deine Funktion einfügst?
Delphi-Quellcode:
(PS: Strg+C funktioniert im Quellcode, in Compiler-/Debuggermeldungen und sogar in den Dialogen/Fehlermeldungen)
var
X: Int64 absolute Value; begin ShowMessage(IntToHex(X, 16));
Delphi-Quellcode:
var
T: TDateTime; begin T := 0; if T < 0 then ; T := NaN; // absichtlich kaputte Zahl (definierter Zustand, welchen auch der Debugger versteht) if T < 0 then ; |
AW: Ungewöhnliche ungültige Gleitkommaoperation
Zitat:
Zitat:
PS: Im Quelltext schon, das übrige geht zumindest in meinem Delphi hier nicht. |
AW: Ungewöhnliche ungültige Gleitkommaoperation
Zitat:
Ansonsten sieht es eher so aus, als wenn da irgendwas anderes total zerschossen wäre und nur hier zufällig erst einen Fehler ausgelöst wird, wenn sich nichtmal die MessageBox zeigt. |
AW: Ungewöhnliche ungültige Gleitkommaoperation
Zitat:
Heute habe ich nochmal die ursprünglichen Daten angesehen, das Feld enthält tatsächlich 8x00, drei darauf folgende Doubles, die mit NaN initialisiert wurden, 000000000000F8FF. Das Programm hat zwar parallele Threads, die Daten (zum Zeitpunkt des Fehlers) stammen aus der eigenen Initialisierung, erst später kommen die Daten von einem anderen Prozess (per Pipe) - dann tritt der Fehler aber auch nicht mehr auf. Die Messageboxen werden dann anständig angezeigt. Wie gesagt, der Try/Except umgeht das Problem vollständig, ich würde nur gern wissen, was denn an der Logik falsch ist. Unmittelbar nach dem Aufruf der Funktion mit diesem Wert, wird sie mit drei anderen Feldern des Records aufgerufen, die exakt gleich ( := 0; ) initialisiert werden. Dabei kommt keine Exception. Ich habe auch versucht, die Werte mit NaN zu initialisieren und entsprechend abzufragen. Dann tritt die Exception nicht mehr in der Funkion auf, sondern irgendwann später und schlägt mit einer Meldung an der Oberfläche auf :-( |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz