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