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