Crush Geschrieben 28. Oktober 2001 Geschrieben 28. Oktober 2001 Also ich wollte mal was ganz einfaches anstellen: Den Sinus aus einer Zahl rausrechnen und dann wieder vom Sinus auf die Zahl kommen. Das macht man mit asin() aus Math.h. Das Ergebnis ist allerdings im Bogenmaß und muß erst wieder in Grad um gewandelt werden. In der Math.h steht der Prototyp so drin: double __cdecl asin(double); float __cdecl asinf( float ); alles klar-> entweder double oder float als Input d.h. daß als Argument ein double übergeben werden sollte!!! (bitte merken) theoretisch sollte das hier funktionieren: double x=sin(90); x=acos(x)/3.14159265358979323*180; ist aber nicht so... erst ein Casten von x auf was kleineres bringt die richtige Lösung: x=acos((long)x)/3.14159265358979323*180; Also vermutlich ist es notwendig, daß das Argument x sich in den unteren 32 Bit befindet, damit ein ordentliches Ergebnis rauskommt. Dann ist jedoch der Prototyp in Math.h nicht korrekt! Es sollte doch wenigstens eine Bereichsprüfung stattfinden, damit sowas nicht passiert, oder? Habt Ihr auch schon solche komischen Probleme mit mathematischen Funktionen gehabt? Oder mache ich etwas falsch? (ist ja alles möglich) Zitieren
gajUli Geschrieben 28. Oktober 2001 Geschrieben 28. Oktober 2001 Hey Crush, sin(90) liefert selbstverstaendlich nicht den Sinus von 90 Grad, weil, wie Du richtig anmerkst, der Winkel im Bogenmass gezaehlt wird. Ich weiss auch nicht, warum Du als Umkehrfunktion von sin() den acos() nimmst. Uli Zitieren
Crush Geschrieben 28. Oktober 2001 Autor Geschrieben 28. Oktober 2001 Das mit dem Bogenmaß war mir schon klar ... (richtig lesen) Du hast irgendwas falsch verstanden: Es ging um den (long)-cast: x=acos((LONG)x)/3.14159265358979323*180; acos verlangt float oder double, aber wenn ich das double Ergebnis von sin() wieder reinstecke kommt nur Müll bei raus. Nach diesem (long)cast stimmt das Ergebnis plötzlich unerwartet. Mir ging es darum, ob die Deklaration von acos in math.h fehlerhaft sein könnte oder die Funktion selbst, weil keine Bereichsprüfung für Wertüberschreitungen vorgenommen werden. Wenn Du noch andere Methoden kennst (am besten Schnellere), wie ich vom Sinus auf den Winkel komme, dann würde mich das sehr interessieren! Zitieren
gajUli Geschrieben 28. Oktober 2001 Geschrieben 28. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Crush: <STRONG> Du hast irgendwas falsch verstanden: </STRONG> Zitieren
gajUli Geschrieben 28. Oktober 2001 Geschrieben 28. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Crush: <STRONG> Wenn Du noch andere Methoden kennst (am besten Schnellere), wie ich vom Sinus auf den Winkel komme, dann würde mich das sehr interessieren!</STRONG> Zitieren
Crush Geschrieben 28. Oktober 2001 Autor Geschrieben 28. Oktober 2001 Sowas habe ich mir schon gedacht, weil der asin() minimum 16,5 mal länger braucht als sin(). Zitieren
Crush Geschrieben 28. Oktober 2001 Autor Geschrieben 28. Oktober 2001 Aha, ich hab´s schon. arcussinus x = x + 1*xhoch3/(2*3) + 1*3*xhoch5/(2*4*5) + 1*3*5*xhoch7/(2*4*6*7) ... usw gar nicht so einfach ... ich glaube nicht, daß ich das sehr viel schneller hinbekomme als die FPU und die math-lib. <FONT COLOR="#a62a2a" SIZE="1">[ 28. Oktober 2001 19:31: Beitrag 6 mal editiert, zuletzt von Crush ]</font> Zitieren
gajUli Geschrieben 28. Oktober 2001 Geschrieben 28. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Crush: <STRONG> ich glaube nicht, daß ich das sehr viel schneller hinbekomme als die FPU und die math-lib.</STRONG> Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.