sin x mit c berechnen

Gast #199118
Lesenswert?

Hallo,

wir müssen in der Schule den sin(x) mit Hilfe von C berechnen, wobei
der Sinus über ein Taylor-Polynom (Reihe) definiert wird.
Man soll am Schluß nur den x-Wert eingeben und das Programm soll dann
den errechneten Sinus-Wert ausgeben.

Hat irgend jemand eine Ahnung wie das geht, ich als C-Neuling bis jetzt
noch nicht.

Gruß Martin
Gast #199122
Lesenswert?

ich würde folgendes vorschlagen:

float sin(x, genauigkeit) {
  float temp;

  temp = x;
  for(int n=0;n<genauigkeit;n++) {
    temp += pow(-1,n) * (pow(x,2*n+1)/fak(2*n + 1));
  }
  return temp;
}


double fak(x) {
  double temp;
  for(int i=1;i<=x;i++) temp*=i;
  return temp;
}


nicht getestes...sollt aber hinhaun...
Gast #199123
Lesenswert?

Hallo,

hab leider die Aufgabenstellung etwas fehlintepretiert, bei mir muss
man den Wert in Grad eingeben, welcher dann ins Bogenmaß umgewandelt
wird. Unter Genauigkeit hatte ich eigentlich die Anzahl der
Rechenschritte verstanden, wenn man bei mir z.B. 30 eingibt wird 30 mal
das x^n ausgerechnet und dann abgebrochen.

Die Aufgabenstellung lautet aber: "es soll der sinus einer zahl
berechnet werden, wie das geht steht in jeder Formelsammlung!! Also
keine Standart c++ funktion benutzen, sondern ein Programm das mit
Hilfe von Funktionsaufrufen die Fakultät. die Hochzahl und den Sinus
berechnet. Diese 3 Sachen sind auszuprogrammieren!!!! Näheres gibts
Montags bzw. Donnerstags während des Praktikums!! Sinnvolles
Abruchkriterium für die Genauigkeit der Berechnung 0.000001! Das ganze
soll dann auch noch mit der in C++ Standartfunktion verglichen
werden!"

Vielleicht kann mir jemand weiterhelfen, hab mein Program mal
angehängt.

Gruß Martin
Angehängte Dateien:
Gast #199125
Lesenswert?

@tobi, sieht mal nicht schlecht aus, muss man bei dir den x-Wert in
Radiant oder in Grad eingeben?

weißt du wie das mit der Genauigkeitsabfrage am Anfang gehen könnte,
also z.B. Genauigkeit von 0,001 ?
Gast #199126
Lesenswert?

die genauigkeit könnte man evtl dadruch machen, dass man die differenz
von 2 aufeinanderfolgenden ergebnissen berechnet und diese mit einer
vorgegebenen genauigkeit vergleicht.
allerdings solltest du nicht mehr als die benutzten 20 durchläufe
machen, da die fakultät sonst zu gross wird und falsche ergebnisse
kommen (deswegen hab ich schon __int64 benutzt)

das ergebnis ist in rad
Gast #199127
Lesenswert?

Hi

du wirst doch hier nicht deine Hausaufgaben vom Forum machen lassen.
Wenn das mal dein Tutor erfährt :-)

Die Genauigkeit ergibt sich aus dem Term den du immer wieder
dazuaddierst/subtrahierst. Also das x^n/n!. Wenn dieser Wert kleiner
als die geforderte Ganauigkeit ist hast du die benötigte Genauigkeit
erreicht.


Matthias
Gast #199128
Lesenswert?

Moin,

nur mal so zur Info. In der Praxis wird der sin(x) durch ein Polynom
(z.B. ax^2+bx+c)approximiert. Dazu reicht es aus, ein Polynom mit
hinreichender Genauigkeit im Bereeich von [0..pi/2] zu finden. Der Rest
wird durch Spiegelung und Verschiebung berechnet. Das Polynom wird nach
dem Horner-Schema(nur Multiplikationen, keine Potenzen) berechnet.
Hoffentlich wars das Hornerschema?! Ist schon so lange her ;-)

Grüße
Oliver
Gast #199129
Lesenswert?

"du wirst doch hier nicht deine Hausaufgaben vom Forum machen lassen.
Wenn das mal dein Tutor erfährt :-)"

ich hab auch nur meine hausaufgaben gepostet ;)

"Das Polynom wird nach dem Horner-Schema(nur Multiplikationen, keine
Potenzen) berechnet.Hoffentlich wars das Hornerschema?!"

jep, war es. hast du irgendwo einen guten link, der dieses verfahren
mit den polynomen genauer erklärt?

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