Sinus mit der Taylorreihe in C/C++

Tja da ich mitlerweile schon die 3. Anfrage zu dem Problem hatte obwohl dies recht leicht ist aber auch schnell tricky werden kann, poste ich hier mal einen Beispielprogramm in C bzw C++ (wenn man die Typecasts entfernt gehts auch in Standart C)

#include
#include

int fak(int f)
{ 

    if(f<=0)
        return 1;
    else
        return (f * fak(f-1));
}



double mein_sin (double winkel_bogenmass, double summe = 0, int iteration = 0)
{
    // Taylorreihe: x - x^3/3! + x^5/5! + ... +(-1)^(n+1)*x^(2*n+1)/(2*n+1)!
    double term = (pow(winkel_bogenmass, (2 * iteration + 1) )/fak(2 * iteration + 1));
    
    if( fabs(term) >= 0.00001 ) 
        return mein_sin(winkel_bogenmass, (summe + pow(static_cast(-1), iteration) * term), (iteration + 1));
    else 
        return ( summe + pow(static_cast(-1), iteration)*term);
}

int main ()
{
double winkel_grd, winkel_bog;
double berechnetersin, echtersin;

    // Merke input erfolgt im Gradmaß somit muss es ins Bogenmaß umgeformt werden mit der formel x = a/180 · p wobei x deinem Gradmass entspricht
    // Um das ganze für C Spezifisch umzuformen entweder die Konstate M_PI nutzen oder direkt angeben, sähe dann folgendermaßen aus
    // Wenn man M_PI benutzt kanns sein dass man das dem Compiler mittelein muss er solle doch bitte auch die Mathe Konstaten laden/einbinden
    // bogenmass = gradmass/180*3.1415926535;
    // bogenmass = gradmass/180*M_PI;
    // Die umrechnung in die andere richtung wäre dann
    // a = (x · 180)/pi sprich
    // gradmass = (bogenmass*180)/3.1415926535;
    // gradmass = (bogenmass*180)/M_PI;
    // Wie gesagt Variablen in diesem fall müssen als Bogenmaß übergeben werden sonst kommt nur Grütze raus!
    // In Anlehnung an den Taschenrechner
    // deg = gradmass
    // rad = bogenmass
    printf("Geben sie eine reelle Zahl ein\n");
    scanf("%lf", &winkel_grd);

    // Umrechnen in Bogenmaß
    winkel_bog = winkel_grd/180*3.1415926535;

    berechnetersin = mein_sin(winkel_bog);
    echtersin = sin(winkel_bog);

    printf("mein sinus: %lf, echter sinus:%lf", berechnetersin, echtersin);

return 0;
}

ich hoffe das hilf einigen weiter

MfG Frank

2 Antworten zu “Sinus mit der Taylorreihe in C/C++”

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.