Hot News:

Unser Angebot:

  Foren auf CAD.de
  Grundsätzliches
  Vergleiche von reelen Zahlen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
Autor Thema:  Vergleiche von reelen Zahlen (706 mal gelesen)
AndreasK
Administrator
Daseinsinformatiker


Sehen Sie sich das Profil von AndreasK an!   Senden Sie eine Private Message an AndreasK  Schreiben Sie einen Gästebucheintrag für AndreasK

Beiträge: 1126
Registriert: 02.03.2000

erstellt am: 14. Feb. 2001 13:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Immer wieder findet man, in C und Basic, Vergleiche auf Gleichheit von zwei Double Variablen:

if (a == b) oder ähnliches.
Das ist natürlich (für einen Computer) ein unlösbares Problem und man bekommt in 99.9% der Fälle nicht das was man erwartet. Wird z.B. ein Winkel auf 90° getestet in der Form:

#define STDPI_2 (double)1.57079632679489662
...

double agl;

agl = BerechneWinkel;
if (STDPI_2 == agl)
{
...
}

ist das Ergebnis meist nicht so wie gewollt und reiner Zufall wenns doch funktioniert!!!
Relle Zahlen (double, float) sollten auf ihre Differenz hin überprüft werden:

#define STDEQUTINY (double)1.0e-9
#define ISEQU(a,b) (fabs((a) - (b)) <= STDEQUTINY)

...


if (ISEQU(a,b))
{
...
}

Der Wert für die Differenz, hier 1.0e-9, ist je nach Anforderung geeignet zu wählen, für CAD reicht aber 1.0e-9 völlig aus.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Horst01
Mitglied
Angestellter

Sehen Sie sich das Profil von Horst01 an!   Senden Sie eine Private Message an Horst01  Schreiben Sie einen Gästebucheintrag für Horst01

Beiträge: 1
Registriert: 23.10.2007

erstellt am: 23. Okt. 2007 19:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für AndreasK 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von AndreasK:
Immer wieder findet man, in C und Basic, Vergleiche auf Gleichheit von zwei Double Variablen:

if (a == b) oder ähnliches.
Das ist natürlich (für einen Computer) ein unlösbares Problem und man bekommt in 99.9% der Fälle nicht das was man erwartet. Wird z.B. ein Winkel auf 90° getestet in der Form:

#define STDPI_2 (double)1.57079632679489662
...

double agl;

agl = BerechneWinkel;
if (STDPI_2 == agl)
{
  ...
}

ist das Ergebnis meist nicht so wie gewollt und reiner Zufall wenns doch funktioniert!!!
Relle Zahlen (double, float) sollten auf ihre Differenz hin überprüft werden:

#define STDEQUTINY  (double)1.0e-9
#define ISEQU(a,b) (fabs((a) - (b)) <= STDEQUTINY)

...


if (ISEQU(a,b))
{
  ...
}

Der Wert für die Differenz, hier 1.0e-9, ist je nach Anforderung geeignet zu wählen, für CAD reicht aber 1.0e-9 völlig aus.


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz