Udostępnij za pośrednictwem


_status87, , _statusfp_statusfp2

Pobiera słowo stanu zmiennoprzecinkowe.

Składnia

unsigned int _status87( void );
unsigned int _statusfp( void );
void _statusfp2(unsigned int *px86, unsigned int *pSSE2)

Parametry

px86
Ten adres jest wypełniony słowem stanu jednostki zmiennoprzecinkowej x87.

pSSE2
Ten adres jest wypełniony słowem stanu jednostki zmiennoprzecinkowej SSE2.

Wartość zwracana

Dla _status87 i _statusfpbity w zwróconej wartości wskazują stan zmiennoprzecinkowy. Zobacz FLOAT. Plik dołączania H dla definicji bitów, które są zwracane przez _statusfp. Wiele funkcji biblioteki matematycznej modyfikuje wyraz stanu zmiennoprzecinkowego z nieprzewidywalnymi wynikami. Optymalizacja może zmienić kolejność, połączyć i wyeliminować operacje zmiennoprzecinkowe wokół wywołań funkcji _status87, _statusfpi powiązanych. Użyj opcji kompilatora /Od (Wyłącz (Debug)) lub fenv_access dyrektywy pragma, aby zapobiec optymalizacjom, które zmieniają kolejność operacji zmiennoprzecinkowych. Zwracane wartości z _clearfp i i _statusfp, a także parametry zwracane parametrów _statusfp2, są bardziej niezawodne, jeśli mniej operacji zmiennoprzecinkowych jest wykonywanych między znanymi stanami słowa stanu zmiennoprzecinkowego.

Uwagi

Funkcja _statusfp pobiera słowo stanu zmiennoprzecinkowego. Wyraz stanu jest kombinacją stanu procesora zmiennoprzecinkowego i innych warunków wykrytych przez program obsługi wyjątków zmiennoprzecinkowych — na przykład przepełnienie stosu zmiennoprzecinkowego i niedopełnienie. Niemaskowane wyjątki są sprawdzane przed zwróceniem zawartości wyrazu stanu. Innymi słowy, obiekt wywołujący jest informowany o oczekujących wyjątkach. Na platformach _statusfp x86 zwraca kombinację stanu zmiennoprzecinkowego x87 i SSE2. Na platformach x64 zwrócony stan jest oparty na stanie MXCSR usługi SSE. Na platformach _statusfp ARM64 zwraca stan z rejestru FPSCR.

_statusfp jest niezależną od platformy, przenośną wersją programu _status87. Jest ona identyczna z _status87 platformami Intel (x86) i jest również obsługiwana przez platformy x64 i ARM64. Aby upewnić się, że kod zmiennoprzecinkowa jest przenośny do wszystkich architektur, użyj polecenia _statusfp. Jeśli używasz tylko platform x86, możesz użyć _status87 polecenia lub _statusfp.

Zalecamy _statusfp2 stosowanie układów (takich jak Pentium IV), które mają procesor x87 i SSE2 zmiennoprzecinkowy. W przypadku _statusfp2elementu adresy są wypełniane przy użyciu słowa stanu zmiennoprzecinkowego dla procesora zmiennoprzecinkowego x87 lub SSE2. W przypadku mikroukładu obsługującego procesory zmiennoprzecinkowe x87 i SSE2 jest ustawiona na 1, jeśli _statusfp jest używana, _controlfp a akcja była niejednoznaczna, EM_AMBIGUOUS ponieważ może odwoływać się do słowa o stanie x87 lub SSE2. Funkcja jest obsługiwana _statusfp2 tylko na platformach x86.

Te funkcje nie są przydatne w przypadku /clr (kompilacja środowiska uruchomieniowego języka wspólnego), ponieważ środowisko uruchomieniowe języka wspólnego (CLR) obsługuje tylko domyślną precyzję zmiennoprzecinkową.

Wymagania

Procedura Wymagany nagłówek
_status87, , _statusfp_statusfp2 <float.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// 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

Zobacz też

Obsługa obliczeń matematycznych i zmiennoprzecinkowych
_clear87, _clearfp
_control87, , _controlfp__control87_2