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.