Sinus mit Reihenentwicklung in C

Gast #4206636
Lesenswert?

Guten Morgen,

sieht jemand den Fehler in dem unten stehenden Übungsprogramm?
Bei 180° sollte ja eigentlich ein Sinus von 0 rauskommen... tut es aber 
nicht.

Gruß
1
#include <stdio.h>
2

3
#define PI (3.14159f)
4
#define DEG2RAD(x) (PI * (x) / 180.f)
5
#define RAD2DEG(a) (180.f * (a) / PI)
6

7
float power( float base, int exp ) {
8
    
9
    float result = 1.f;
10
    int n = 0;
11

12
    for( n=0; n<exp; ++n ) {
13
       result *= base; 
14
    }
15

16
    return result;
17
}
18

19
float sine( float a ) {
20
    return (a - power(a, 3) / 6.f + power(a, 5) / 120.f );
21
}
22

23
int main( void ) {
24

25
    float angleDegree = 0.f;
26
    float angleRadian = 0.f;
27

28
    puts( "Sinus mit Reihenentwicklung" );
29

30
    printf( "Winkel eingeben: " );
31
    scanf( "%f", &angleDegree );
32
    angleRadian = DEG2RAD( angleDegree );
33

34
    printf("Sinus: %f\n", RAD2DEG( sine(angleRadian) ) );
35

36
return 0;
37
}
#4206719
Lesenswert?

Reihe schrieb:
> sieht jemand den Fehler in dem unten stehenden Übungsprogramm?
Du hast zu wenig Reihenglieder verwendet:
http://www.wolframalpha.com/input/?i=plot+x-x^3%2F6%2Bx^5%2F120+and+sin%28x%29+from+-pi+to+pi
Wenn du das mit x^7 noch dazu nimmst wird's besser:
http://www.wolframalpha.com/input/?i=plot+x-x^3%2F6%2Bx^5%2F120-x^7%2F7!+and+sin%28x%29+from+-pi+to+pi

P.S.: Ich sehe jetzt nicht, was die Frage in "Ausbildung, Studium & 
Beruf" zu suchen hat. Je nach Zielplattform wäre sie in µC & Elektronik 
oder PC-Programmierung besser aufgehoben.
#4206807
Lesenswert?

Die Reihenentwicklung vom Sinus konvergiert sehr sehr langsam, wenn du 
weit vom Entwicklungspunkt weg bist. Du entwickelst um 0, wenn du damit 
den Sinus von pi ausrechnen willst bist du eine Weile beschäftigt. Mit 3 
Reihengliedern kommst du jedenfalls nicht weit.

In der Praxis ist die Methode mit der Reihenentwicklung ziemlich 
untauglich, außer du willst nur Werte die nahe bei einem bekannten 
Entwicklungspunkt liegen (a ist zum Beispiel eine gute Nährung für 
sin(a) für a < 5°)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren