Sinus - Kosinus Ausrechnen
-
Hi Leutz,
hab ne kleine frage auf die ich im internet noch nichts gefunden habe...
weiß einer von euch wie man sinus oder kosinus einer zahl ausrechnet? ich kenne das verfahren der Reihenentwicklung. ich habe davon gehört das es einen weg geben soll bei dem man die einzelnen stellen nach und nach ausrechnen kann. das soll im übrigen auch mit Π gehen.kennt da einer von euch ne möglichkeit?
thx schon mal im vorraus.
-
Auf Wikipedia steht etwas zur Bailey-Borwein-Plouffe-Formel (für Pi-Berechnung).
Bei den Sinen wüsste ich jetzt nichts vergleichbares.
-
erstmal danke GNU-Fan.
also mein problem ist halt dass ich nicht weis wie oft ich die reihe wiederholen muss um bestimmte genauigkeiten zu erhalten.
Taylorreihe:
sin(x) = Σ (-1)n*((x2n+1)/(2n+1)!)wenn ich zum beispiel sin(1) mache reichen für 6 stellen genauigkeit 4 durchläufe. bei sin(10) und 6 stellen brauche ich jedoch 18 durchläufe.
#include <iostream> #include <cmath> using namespace std; double fak(double val) { if (val > 1) return fak(val-1) * val; } int main() { bool schalt=true; double sinus; int von; while(cin >> von && von) { sinus = sin(von); cout << sinus << "\n" << endl; sinus = 0; for(int i=1; i<50; i+=2) { // 25 durchläufe if(schalt) sinus += (pow(von, i)/ fak(i)); else sinus -= (pow(von, i)/ fak(i)); schalt = !schalt; cout << i/2+1 << "\t"/* << pow(von, i) << "\t" << fak(i) << "\t" */<< sinus << endl; } } } // sorry für hässlichen code habs in 5min zusammengeschusstert
woher weis ich jetzt wie oft ich bestimmte zahlen habe und noch viel wichtiger wenn ich statt 6 mehr gaunigkeit haben will.
ich habe auch noch nichts gefunden was so funktioniert wie Bailey-Borwein-Plouffe-Formel für Pi. ich glaube da gibt es auch nichts..
wenn jemand ne idee hat...
-
Vergleiche doch den letzten berechneten Sinus-Wert
mit dem vorletzten (Differenz bilden) und dann mit
der von dir gewünschten Genauigkeit vergleichen und
abbrechen bzw. weiterrechnen.Gruß,
Andreas
-
bevor ihr sin und cos mit Taylor-Reihen ausrechnet, schaut mal bei wiki unter CORDIC nach.
-
@AndreasBo
sorry raff i net.
kannst du das bitte etwas genauer verdeutlichen?
-
In deiner for Schleife merkst du dir den zuletzt
berechneten Wert und vergleichst ihn ab dem zweiten
Schleifendurchlauf:Die Genauigkeit nimmt doch mit jedem Schleifendurchlauf zu
Etwa so würde ich es prüfen
if (sinus_neu - sinus_alt < 0.000001)
return (sinus_neu); // Gewünschte Genauigkeit von 0.000001 erreichtGruß
Andreas