FPU-Debug-Fenster in VC++
-
Gibts in VC++ ein Debug-Fenster, in dem ich mir ansehen kann, wie das FPU-Controll-Word gesetzt ist?
-
Beim VC6 wird's angezeigt, bei den späteren vermutlich auch.
-
dass es angezeigt wird, dacht ich mir auch. Nur: wo?
-
Noch ne Frage:
Ich lass mir das FPU-Controlword auf die Konsole ausgeben:
_control87( 0x027F, 0xFFFF);
int word( _control87( 0, 0));
std::cout << std::hex << word << std::endl;Mit dem C++Builder compiliert erscheint auf der Konsole '27F', also der Wert, auf den ich das Controlword gesetzt habe.
In VC++ erscheint hingegen '9021f'. Mach ich irgendwas mit der Formatierung der Ausgabe falsch oder ist das Flag tatsächlicht falsch gesetzt?
-
debug->window->register und im fenster rechts klicjen und die gewüschten regs aussuchen.
hast du die anzeige der flags im release versucht?
-
ok, danke.
Dann mach ich aber irgendwas falsch beim setzen (wie die Konsolenausgabe ja andeutet):
Beim Programmstart steht ist lt Registerfenster
'CTRL = 027F'
gesetzt.
Jetzt ruf ich
_control87( 0x027F, 0xFFFF);
auf. Danach ist
'CTRL = 0A7F'
Warum? Ich habs doch auf den Wert gesetzt, der es vorher war. Es dürfte doch nix ändern????
Derselbe Code mit dem C++Builder übersetzt, verhält sich wie erwartet.
Sowohl realease als auch debug-Compilate liefern bei VC++ dasselbe (komische) Ergebnis.
-
hm, kapier ich irgendwie nicht:
float.h beim BCB:
#define MCW_EM 0x003f /* interrupt Exception Masks*/ #define EM_INVALID 0x0001 /* invalid */ #define EM_DENORMAL 0x0002 /* denormal */ #define EM_ZERODIVIDE 0x0004 /* zero divide */ #define EM_OVERFLOW 0x0008 /* overflow */ #define EM_UNDERFLOW 0x0010 /* underflow */ #define EM_INEXACT 0x0020 /* inexact (precision) */
float.h bei VC++
#define _MCW_EM 0x0008001f /* interrupt Exception Masks */ #define _EM_INEXACT 0x00000001 /* inexact (precision) */ #define _EM_UNDERFLOW 0x00000002 /* underflow */ #define _EM_OVERFLOW 0x00000004 /* overflow */ #define _EM_ZERODIVIDE 0x00000008 /* zero divide */ #define _EM_INVALID 0x00000010 /* invalid */ #define _EM_DENORMAL 0x00080000 /* denormal exception mask (_control87 only) */
Warum sind die Werte bei beiden völlig unterschiedlich???
-
weli man nicht hardcoden sollte...