Sinus mit der Taylorreihe in C/C++
Posted by Frank | Posted in C/C++, Programmierung, Studium | Posted on 6. Mai 2009
0
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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include<stdio.h> #include <math.h> 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<double>(-1), iteration) * term), (iteration + 1)); else return ( summe + pow(static_cast<double>(-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; } |
#include<stdio.h>
#include
<math.h>
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<double>(-1), iteration) * term), (iteration + 1));
else
return ( summe + pow(static_cast<double>(-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
