Sinus in C++



  • Hey ich hab in meine Programm den Sinus einer Zahl ausrechnen wollen und das die Funktion sin(double) gibt ja standardmässig in Radiant aus.
    Für Radiant ist das Ergebnis natürlich richtig aber da ich es auch in Grad haben möchte hab ich mir das mal so gedacht:

    (sin(zahl1)*180)/3.1415926535
    

    Also das Bogenmaß*180/PI
    Aber mir kommt demnach für Sinus von 90 nur 51.22 heraus anstatt 1 -.-
    Wo ist mein Problem?



  • Du musst das Argument vom Sinus, d.h. in deinem Fall zahl1 in Radian angeben.

    Und fuer PI solltest du schon eine Konstante definieren. Am besten berechnest du zu Beginn gleich die Umrechnungsfaktoren von Deg to Rad und umgekehrt.

    Hier mal in Code:

    const double PI = 3.1415926535;
    const double Deg_To_Rad = PI / 180.0;
    
    int main()
    {
    	cout << sin(90 * Deg_To_Rad) << endl;
    }
    


  • icarus2 schrieb:

    Du musst das Argument vom Sinus, d.h. in deinem Fall zahl1 in Radian angeben.

    Und fuer PI solltest du schon eine Konstante definieren. Am besten berechnest du zu Beginn gleich die Umrechnungsfaktoren von Deg to Rad und umgekehrt.

    Hier mal in Code:

    const double PI = 3.1415926535;
    const double Deg_To_Rad = PI / 180.0;
    
    int main()
    {
    	cout << sin(90 * Deg_To_Rad) << endl;
    }
    

    Hä? Mach doch gleich eine Funktion toRadian, oder mysin...

    Edit: Code war falsch, siehe zwei weiter unten... 🙄



  • Hacker schrieb:

    Hä? Mach doch gleich eine Funktion toRadian, oder mysin...

    Joar, kann man auch wenn man moechte.

    Allerdings ist dein Code noch ambiguous.



  • icarus2 schrieb:

    Hacker schrieb:

    Hä? Mach doch gleich eine Funktion toRadian, oder mysin...

    Joar, kann man auch wenn man moechte.

    Allerdings ist dein Code noch ambiguous.

    Mein Code ist total falsch, meinst du.

    #include <iostream>
    #include <complex>
    
    const double PI = 3.1415926535;
    
    template<typename type>
    type toRadian(type temp)
    {
        return (temp / 180) * PI;
    }
    
    int main()
    {
        std::cout << std::sin(toRadian((long double)90)) << '\n';
    }
    

    Habe mich vertan, tschuldigung 😃 so ists richtig
    Obwohl, Templates sind hier unnötig. Lieber ohne casterei und gleich ein long double , oder?



  • Am besten gleich mit

    cout << sin(toRadian(90.0)) << '\n';
    

    Das sollte dann funktionieren fuer das Template.

    Ja, ich denke auch ein Template ist in diesem Fall etwas Overkill. Fuer seinen Fall duerfte eine double toRadion(double deg) Funktion reichen.


Anmelden zum Antworten