Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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