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 erreicht

    Gruß

    Andreas


Log in to reply