_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 und Gleitkommaunterstützung
_clear87, _clearfp
_control87, _controlfp, __control87_2