Sinus mit der Taylorreihe in C/C++

Posted by Frank | Posted in C/C++, Programmierung, Studium | Posted on 06-05-2009-05-2008

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)

#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", &amp;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

  • Google Buzz
  • Identi.ca
  • Add to favorites
  • Digg
  • LinkedIn
  • Slashdot
  • StumbleUpon
  • RSS
  • Facebook
  • Twitter