sinus & cosinus

10/06/2008 - 18:17 von Elmar Sack | Report spam
Hallo,

nach einigem Ärger mit den Nullstellen hat mir folgende Konstruktion
geholfen:

void calc(double angle) {
double sin_alpha = sin(angle);
double cos_alpha = cos(angle);

sin_alpha = ((cos_alpha == 1.0) || (cos_alpha == -1.0)) ? 0.0 : sin_alpha;
cos_alpha = ((sin_alpha == 1.0) || (sin_alpha == -1.0)) ? 0.0 : cos_alpha;
...

Wenn z.B. angle = PI verwendet wird, liefert sinus nicht 0.0 zurück. Der
zurückgelieferte Wert ist aber 1.0 für PI/2, analoges gilt für den Cosinus.

Ist das ein alter Hut?
Gibt es was besseres?
Ist das portabel?

Gruß
Elmar
 

Lesen sie die antworten

#1 ram
10/06/2008 - 18:37 | Warnen spam
Elmar Sack writes:
Wenn z.B. angle = PI verwendet wird, liefert sinus nicht 0.0 zurück.



In C ist der Bezeichner »PI« nicht allgemein definiert.

Die Kreiszahl kann nicht als Wert des Datentyps »double«
dargestellt werden, so daß daher auch der Wert 0 nicht
unbedingt zu erwarten ist.

Allerdings könnte sin( x ) für ein x, das hinreichend nahe an
der Kreiszahl liegt den Wert 0 haben. Wenn dieser Wert e sich
tatsàchlich für jede Nàherung an die Kreiszahl noch etwas von
0 unterscheidet, so ist dies für die meisten Anwendungen nicht
störend.

Der gleiche absolute Fehler e ist dann nicht mehr bemerkbar,
wenn das Ergebnis nahe 1 liegt und 1 + e == 1 gilt.

Ähnliche fragen