AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem beim Vergleichen von Real-Zahlen

Ein Thema von Justanothernickname · begonnen am 30. Mai 2007 · letzter Beitrag vom 30. Mai 2007
Antwort Antwort
Justanothernickname

Registriert seit: 30. Mai 2007
1 Beiträge
 
#1

Problem beim Vergleichen von Real-Zahlen

  Alt 30. Mai 2007, 20:11
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?
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Problem beim Vergleichen von Real-Zahlen

  Alt 30. Mai 2007, 20:23
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
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#3

Re: Problem beim Vergleichen von Real-Zahlen

  Alt 30. Mai 2007, 20:29
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 von Delphi OnlineHilfe:
const NaN: Extended = -NAN;
wtf? DAS geht???
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
30. Mai 2007, 21:51
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Problem beim Vergleichen von Real-Zahlen

  Alt 30. Mai 2007, 22:29
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 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