[FPU] fdivp - instruction may be inaccurate on some Pentiums
-
Hi,
ich versuche momentan mein Assembler wieder etwas aufzufrischen und hab mir deshalb wieder die FPU geschnappt. Ich habe begonnen indem ich einfache nathematische Funktionen schreibe, bei allein kein großes problem doch bei der tan-Funktion gab es ein Warning, bei dem ich nicht ganz weiter komme:
warning C4725: instruction may be inaccurate on some Pentiums
warning C4725: instruction may be inaccurate on some PentiumsDabei geht es um die fdivp Instruktion.
inline float tan (float value) { asm fld value asm fsincos asm fdivp st(1), st(0) ; << asm fst value return value; }
Ich möchte diese Warning aber auch nicht ignorieren, deshalb frag ich einfach mal wie man dieses Problem behebt.
Danke im voraus!
-
Du kannst die Warnung getrost ignorieren. Die bezieht sich auf die alte, erste, Pentium I Serie (von ca. 1995).
Sieht so aus, als ob Du VC++ verwendest ... in dem Fall kannst Du z.B. mit der Option "/G6" dem Compiler sagen, daß er Code für Pentium Pro Prozessoren und aufwärts erzeugen soll. Dann dürfte die Warnung verschwinden.
-
Power Off
Vielen Dank für die InfoMit /G6 ist es weg
Danke
-
Ist das dieser bekannte Pentium Bug?
-
Ja.
-
Achja mir ist da grade etwas sehr interessantes aufgefallen! Irgendwie ist das ergebnis total falsch?
Geb ich in meinem Taschenrechner tan(45) ein ist das ergebnis ein anderes als das was ich von meiner Funktion zurück bekomme? Auch auf anderen Taschenrechnern das selbe Spiel? Hab Deg und Rad verglichen, irgendwie passt keines der Ergebnisse meiner Funktion zu denen welche ich auf meinen Taschenrechnern habe?
-
Die Mathe-Funktionen der C Library arbeiten im Bogenmaß (Radians).
D.h. 360° = 2.0 * PI, 180° = PI, 90° = PI / 2.0
PI ist definiert als 3.141592646 .
Du kannst Dir z.B. eine Umrechnungsfunktion schreiben:
float deg2rad( float Winkel ) { return Winkel * 2.0f * 3.141592646f / 360.0f; }
hoffe das hilft!