![]() |
Problem beim Vergleichen von Real-Zahlen
Hi,
Hintergrund: Habe ein allgemeines Problem, daß sich auf den Datentyp Real bezieht. Ich habe ein Programm geschrieben, in dem Real-Werte in einer Matrix abgespeichert wurden. In dem Programm war es auch notwendig, neben den Real-Werten auch ungültige Werte darzustellen. Versucht habe ich das mit der größten möglichen Real-Zahl. Dazu habe ich diesen Wert einer Konstanten mit dem Namen 'Unendlich' zugewiesen. Problem: Bei der Ausgabe der Matrix soll der Wert der entsprechenden Zelle ausgegeben werden, falls sie ungleich der Konstanten 'Unendlich' ist, ansonsten der String 'Unendlich'. Leider schlägt der Vergleich jedesmal fehl. Wenn ich mir die Differenz zwischen den gespeicherten Werte und der Konstanten ausgeben lasse, dann wird sie mit xE106 ausgegeben. Damit der Vergleich problemlos funktioniert, muß ich bis auf 1E22 runtergehen. Rein technisch sollte beim abspeichern der Konstanten der Wert doch einfach nur bitweise kopiert werden. Es erfolgen doch keinerlei Rechenoperationen, bei denen Rundungsdifferenzen auftreten. Hat hier vielleicht jemand eine logische Erklärung, warum schon beim bloßen kopieren Real-Werte verändert werden? |
Re: Problem beim Vergleichen von Real-Zahlen
|
Re: Problem beim Vergleichen von Real-Zahlen
Real ist doch so was komisches...
Je nach Delphi Version ist das entweder ein Real48 (Deprecated!!!) mit 6Byte oder der neue Real mit 8Byte bzw 64Bit. Naja, jedenfalls rechnet Delphi intern ja erstmal mit 32Bit-Fließkommawerten... Und wenn du die dann in einen Real reinzwingst kommt es eben doch wieder zu solchen Rundungsfehlern. In diesem Fall würde ich aber auch die NaN Methode nehmen... PS: dazu eine kleine Frage.. Zitat:
|
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
|
Re: Problem beim Vergleichen von Real-Zahlen
Ansonsten möchte ich noch darauf hinweisen, dass ein Vergleich oder rechnen mit NaN nicht gesund ist und grundsätzlich immer mit IsNaN() geprüft werden sollte. Ansonsten bietet Delphi in den höheren Versionen zum Fliesskommazahlenvergleich auch Funktionen: SameValue(), etc
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:10 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