sin,cos,tan,cot



  • Hallo @all!

    Hab mal ne Frage.
    Wenn ich die Werte der trigonometrischen Funktionen sin, cos und tan für PI/6 ausgeben will (PI natürlich als KOnstante definiert) und die Datei math.h nicht inkludiere, kommt ein Compiler Fehler, dass es die Funktion tan() nicht kennt. Wenn ich das jedoch ohne tan() mache, also nur mit sin() und cos(), dann gehts! Wenn ich das alles mit tan() machen will, muss ich die Datei math.h inkludieren.

    Könnte mir mal jemand verraten warum für cos() und sin() die Datei <iostream.h> reicht und ich für tan() noch math.h brauch??? ist doch irgendwie seltsam...

    achja,... wie werden die Sinus Werte denn angegeben? Bogenmaß oder Gradmaß? bzw. wie stell ich das dann um???

    Nochwas, welche Datei muss ich für die Funktion sleep() inkludieren?

    Das da oben betrifft alles

    Danke schon mal für die Antworten

    gemuse



  • Original erstellt von gemuse:
    ...Könnte mir mal jemand verraten warum für cos() und sin() die Datei <iostream.h> reicht und ich für tan() noch math.h brauch??? ist doch irgendwie seltsam...
    ...gemuse

    Sind wahrscheinlich intrinsic.



  • Nochwas, welche Datei muss ich für die Funktion sleep() inkludieren?

    sleep gibt es nicht in ISO C++. Falls du ein POSIX.1 kompatibles OS hast, würde ich es mal mit unistd.h versuchen

    Könnte mir mal jemand verraten warum für cos() und sin() die Datei <iostream.h> reicht und ich für tan() noch math.h brauch??? ist doch irgendwie seltsam...

    iostream.h ist veraltet! http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=iostream#Answ

    zum Problem:
    naja, genau kann ich es dir auch nicht erklären, warum das genau so ist. Aber AFAIK ist das laut ISO Standard okay, da die Header glaub ich auch beliebige andere Standard funktionen inkludieren können. Wenn du aber Platform unabhängig seien willst, dann solltest du cmath includieren



  • #include <iostream>
    #include <stdlib.h>
    #include <math.h>
    
    int main()
    {
        const float PI=3.14159f;
        cout << sin(PI) << "\n\n\n";
    
        system("PAUSE");
        return 0;
    }
    

    Ich stell gerade fest, das ein falscher Sinus-Wert ausgegeben wird, nämlich:2.53518e-06

    das kann ja net ganz sein... Laut sinus Kurve ist aber sinusPI = 0

    Wenn ich sin(180) mache klappts auch net(180 entspricht ja PI)... an was kann das liegen?
    Wenn ich andere Datentypen für PI nehm klappts auch net

    gemuse



  • 0 ist genauso gleich 2.53518E-06, wie 3.14159 gleich pi ist 😉



  • ok hast recht 🙂
    dann funkionierts ja, wenn ich sin(3.14159/2) gibt er auch 1 auch, so wies sein soll 🙂

    aber kannst du oder jemand anderer mir sagen, wie ich statt diesem komischen Wert die Zahl 0 anzeigen lassen kann, bzw. warum zeigt er nicht 0 an sondern diese komische Zahl??

    gemuse



  • Rechenungenauigkeit. Du kannst sowas machen:

    double result = sin(3.1415926535897932384626433);
    if (abs(result) < epsilon)
      result = 0;
    

    (epsilon beliebig klein)



  • abs ist fuer int
    fabs fuer float

    und epsilon ist in numeric_limits<T>::epsilon()



  • Nö, es gibt eine Überladung von abs für Doppelte.

    gemuse: Wieso 'komische Zahl'? Es ist eben das, was im Bereich der Genauigkeit deiner Umgebung rauskommt. Wenn Du diese Zahl an einen Integer zuweist, kommt übrigens tatsächlich 0 raus...



  • wie übrigens für fast alle Werte von sin() 😉


Anmelden zum Antworten