Zum Inhalt springen

Fehler in Math.h???


Crush

Empfohlene Beiträge

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)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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>

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...