_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 _statusfp
bity 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
, _statusfp
i 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 _statusfp2
elementu 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