_status87
, _statusfp
_statusfp2
Ruft das Gleitkommastatuswort ab.
Syntax
unsigned int _status87( void );
unsigned int _statusfp( void );
void _statusfp2(unsigned int *px86, unsigned int *pSSE2)
Parameter
px86
Diese Adresse ist mit dem Statuswort für die x87-Gleitkommaeinheit gefüllt.
pSSE2
Diese Adresse ist mit dem Statuswort für die SSE2-Gleitkommaeinheit gefüllt.
Rückgabewert
Bei _status87
und _statusfp
geben die Bits im zurückgegebenen den Gleitkommastatus an. Eine Definition zu den von _statusfp
zurückgegebenen Bits enthält die FLOAT.H-Includedatei. Viele Funktionen der mathematischen Bibliothek ändern das Gleitkommastatuswort, was zu unvorhersehbaren Ergebnissen führt. Eine Optimierung kann Gleitkommaoperationen um die Aufrufe von _status87
, _statusfp
und verwandten Funktionen neu anordnen, kombinieren und vermeiden. Verwenden Sie die Compileroption /Od (Disable (Debug)) oder die fenv_access
Pragma-Direktive, um Optimierungen zu verhindern, die Gleitkommavorgänge neu anordnen. Die Rückgabewerte von _clearfp
und _statusfp
sowie die Rückgabeparameter von _statusfp2
sind zuverlässiger, wenn weniger Gleitkommaoperationen zwischen den bekannten Zuständen des Gleitkommastatusworts ausgeführt werden.
Hinweise
Die _statusfp
-Funktion ruft das Gleitkommastatuswort ab. Das Statuswort ist eine Kombination aus dem Gleitkommaprozessorstatus und anderen Bedingungen, die von dem Handler für Gleitkommaausnahmen – z. B. ein Gleitkomma-Stapelüberlauf und -Stapelunterlauf – erkannt werden. Ausnahmen ohne Maskierung werden überprüft, bevor der Inhalt des Statusworts zurückgegeben wird. Mit anderen Worten, der Anrufer wird über ausstehende Ausnahmen informiert. Auf x86-Plattformen gibt _statusfp
eine Kombination von x87- und SSE2-Gleitkommastatus zurück. Auf x64-Plattformen basiert der zurückgegebene Status auf dem MXCSR-Status von SSE. Gibt auf ARM64-Plattformen _statusfp
den Status aus dem FPSCR-Register zurück.
_statusfp
ist eine plattformunabhängige, portable Version von _status87
. Es ist identisch mit _status87
Intel(x86)-Plattformen und wird auch von den x64- und ARM64-Plattformen unterstützt. Um sicherzustellen, dass Ihr Gleitkommacode für alle Architekturen portabel ist, verwenden Sie _statusfp
. Wenn Sie nur auf x86-Plattformen abzielen, können Sie entweder _status87
oder _statusfp
.
Es empfiehlt sich eine Verwendung von _statusfp2
für Chips (wie Pentium IV), die sowohl einen x87- als auch einen SSE2-Gleitkommaprozessor haben. Bei _statusfp2
werden die Adressen ausgefüllt, indem sowohl für den x87- als auch SSE2-Gleitkommaprozessor das Gleitkommastatuswort verwendet wird. Für einen Chip, der x87- und SSE2-Gleitkommaprozessoren unterstützt, wird auf 1 festgelegt, EM_AMBIGUOUS
wenn _statusfp
oder _controlfp
verwendet wird und die Aktion mehrdeutig war, da sie auf das x87- oder das SSE2-Gleitkommastatuswort verweisen könnte. Die _statusfp2
-Funktion wird nur auf x86-Plattformen unterstützt.
Diese Funktionen sind für /clr (Common Language Runtime Compilation) nicht nützlich, da die Common Language Runtime (CLR) nur die Standard-Gleitkommagenauigkeit unterstützt.
Anforderungen
Routine | Erforderlicher Header |
---|---|
_status87 , _statusfp _statusfp2 |
<float.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// crt_statusfp.c
// Build by using: cl /W4 /Ox /nologo crt_statusfp.c
// This program creates various floating-point errors and
// then uses _statusfp to display messages that indicate these problems.
#include <stdio.h>
#include <float.h>
#pragma fenv_access(on)
double test( void )
{
double a = 1e-40;
float b;
double c;
printf("Status = 0x%.8x - clear\n", _statusfp());
// Assignment into b is inexact & underflows:
b = (float)(a + 1e-40);
printf("Status = 0x%.8x - inexact, underflow\n", _statusfp());
// c is denormal:
c = b / 2.0;
printf("Status = 0x%.8x - inexact, underflow, denormal\n",
_statusfp());
// Clear floating point status:
_clearfp();
return c;
}
int main(void)
{
return (int)test();
}
Status = 0x00000000 - clear
Status = 0x00000003 - inexact, underflow
Status = 0x00080003 - inexact, underflow, denormal
Siehe auch
Mathematische Unterstützung und Gleitkommaunterstützung
_clear87
, _clearfp
_control87
, _controlfp
__control87_2