Sinus



  • Hallo zusammen!
    Bin ein ziemlicher Neuling.

    Kann mir einer sagen, wieso ich mit der Funktion

    double sin (double winkel);

    für einen Winkel von 90°
    0,89... herausbekomme und nicht 1?

    Das gleiche beim Cosinus. Wieso kommt da irgend ein Schrott raus?



  • Das Argument von sin() muss im Bogen- und nicht im Gradmaß angegeben werden:
    x = pi * alpha/180°, d.h. in deinem Fall pi/2



  • Danke, daran hab ich nicht gedacht...



  • die sin-funktion arbeitet mit dem bogenmass.
    willst du den winkel in grad angeben, muss du ihn umrechnen:
    double bogenmass = (PI * grad) / 180;
    double x = sin( bogenmass );

    edit: .



  • #include <iostream>
    #include <conio.h>
    #include <cmath>
    
    using namespace std;
    
    int main()
    {
      const long double PI = 3.1415926535897932384626433832795;
      long double grad, bogenmass, x;
      cout << "Winkel in Grad: ";
      cin  >> grad;
    
      bogenmass = (PI * grad) / 180; 
      x = sin( bogenmass ); 
    
      cout << "Bogenmass: " << bogenmass/PI << " * PI" << endl;
      cout << "Sinus: " << x  << endl;
      getch();
    }
    

    Bei 90° kommt die 1, aber bei 180° kommt leider nicht 0 als Resultat, sondern eine kleine Zahl. Wie kann man das eigentlich exakt berechnen?



  • Hi,

    bei mir kommt folgende ausgabe:

    %./test
    Winkel in Grad: 90
    Bogenmass: 0.5 * PI
    Sinus: 1
    %./test
    Winkel in Grad: 180
    Bogenmass: 1 * PI
    Sinus: 1.22461e-16
    

    Fuer pi hab ich die in der cmath definierte M_PI-Konstante genommen. Dennoch ist
    die Ausgabe merkwuerdig. Laut meinem Calculator, muesste 0.054803665 sein. Warum
    bekomme ich dann obige Ausgabe?

    mfg
    v R



  • Erhard Henkes schrieb:

    Bei 90° kommt die 1, aber bei 180° kommt leider nicht 0 als Resultat, sondern eine kleine Zahl. Wie kann man das eigentlich exakt berechnen?

    wil bei 90° der Fehlereinfluss in der Bestimmung von Pi gegen 0(minimal) geht und bei 180° gegen 1(maximal)?



  • M_PI taugt nichts, ist 3.14159, das geht genauer:

    const double PI = 3.141592654;



  • math.h:
    #define M_PI 3.14159265358979323846



  • PI=2*asin(1);



  • und wer nur näherungswerte braucht der kann doch gleich mit ner festen umrechnungszahl rechnen da ein RAD = 57,29578 GRAD ist

    das wäre dann sowas sin(30/57.29578lf) und ich bekomm auch ein relativ genauen wert raus 0.50000

    bye

    tt



  • Dass Computer nicht rechnen können, ist bereits weitgehend bekannt. 😉



  • Erhard Henkes schrieb:

    Dass Computer nicht rechnen können, ist bereits weitgehend bekannt. 😉

    und dies beweist was? das menschen nicht rechnen koennen? weil sie die computer bauen/programmieren/vom Schreibtisch schubsen? und dies beweist was? das Gott nicht rechnen kann... ouch... hihihi



  • b7f7 schrieb:

    Erhard Henkes schrieb:

    Dass Computer nicht rechnen können, ist bereits weitgehend bekannt. 😉

    und dies beweist was? das menschen nicht rechnen koennen? weil sie die computer bauen/programmieren/vom Schreibtisch schubsen? und dies beweist was? das Gott nicht rechnen kann... ouch... hihihi

    falsch (oder flasch). es beweist, dass menschen dass und das nicht auseinander halten können.

    sorry.



  • Fassen wir doch mal zusammen:
    Selbst mit PI = 3.14159265358979323846 schaffen wir es mit einfachen C++-Mitteln nicht, als Resultat von sin(180°) eine saubere und glatte Null zu liefern. Das ist doch wirklich armselig (oder schreibt man das inzwischen "armseelig"?) und zeigt den Zustand heutiger Rechner und Software deutlich. 😃

    Anmerkung: M_PI ist zwar in math.h bei Dev-C++ enthalten, aber nicht bei MSVC++6. Die genauere Zahl PI wird auf 3.1415926535898 abgeschnitten, wenn ich das im Debugger richtig sehe. Damit erhält man als sin(3.1415926535898 ) 1.2246063538224e-016. Mit "PI=2*asin(1);" verbessert sich die Situation kein Bisschen (früher: Bißchen). 😉

    Mit dem Calculator von MS Windows erhält man übrigens:
    sin(3.1415926535898 ) = -6,7615373566167204971157727028368e-15

    Nimmt man den genaueren Wert wie in M_PI definiert, so findet man mit dem MS Calculator:

    sin(3,14159265358979323846) = 2,6433832795028841970936031444713e-21

    Also (fast) keine Chance mit normalen C++ Bordmitteln. 🙄

    MS Calculator zeigt übrigens folgendes PI: 3,1415926535897932384626433832795



  • naja vielleicht haben computer bei "gewissen" floatingpoint operationen ein kleines darstellungsproblem 😉 aber bei ganzzahlarithmetik sind sie ja wohl unschlagbar *gg*

    bye

    tt



  • Ganzzahlarithmetik? das endet doch auch ruckzuck irgendwo bei 10 ^ 18 (long long). Alles nicht überzeugend. Der Einsteiger ist hier umgehend auf Spezialbibliotheken angewiesen, die langsam und kompliziert sind.



  • das war auf die geschwindigkeit bezogen...nich auf die begrenzte größe und so langsam sind ja wohl die spezialbibliotheken auch nicht

    bye

    tt



  • TheTester schrieb:

    und so langsam sind ja wohl die spezialbibliotheken auch nicht

    Na also der Prozessor kann mit dem Typ "int" sicherlich 10-100 Mal so schnell rechnen wie mit einer Spezialbibliothek...

    MfG SideWinder



  • das is mir schon klar...aber dieses langsam von erhard...das klang so nach nem richtigen total unglaublich langsam 😉

    bye


Anmelden zum Antworten