Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Problem beim Vergleichen von Real-Zahlen (https://www.delphipraxis.net/93047-problem-beim-vergleichen-von-real-zahlen.html)

Justanothernickname 30. Mai 2007 19:11


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?

Hawkeye219 30. Mai 2007 19:23

Re: Problem beim Vergleichen von Real-Zahlen
 
Herzlich willkommen in der Delphi-PRAXiS, Justanothernickname!

Ohne das beschriebene Verhalten näher zu untersuchen: warum verwendest du nicht die Konstante Delphi-Referenz durchsuchenNaN zum Initialisieren und die Funktion Delphi-Referenz durchsuchenIsNaN zum Überprüfen? Du findest beides in der Unit Math.

Gruß Hawkeye

glkgereon 30. Mai 2007 19:29

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:

Zitat von Delphi OnlineHilfe
const NaN: Extended = -NAN;

wtf? DAS geht???

DP-Maintenance 30. Mai 2007 20:51

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.

Muetze1 30. Mai 2007 21:29

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 16:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz