Sdílet prostřednictvím


_status87, _statusfp, _statusfp2

Získá stavové slovo s plovoucí desetinou čárkou.

Syntaxe

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

Parametry

px86
Tato adresa je vyplněna stavovým slovem pro jednotku x87 s plovoucí desetinou čárkou.

pSSE2
Tato adresa je vyplněna stavovým slovem pro jednotku s plovoucí desetinou čárkou SSE2.

Vrácená hodnota

_statusfpBity _status87 v hodnotě, která se vrátí, označují stav s plovoucí desetinou čárkou. Podívejte se na float. H include soubor pro definici bitů, které jsou vráceny _statusfp. Mnoho funkcí matematické knihovny upravuje stavové slovo s plovoucí desetinou čárkou s nepředvídatelnými výsledky. Optimalizace může měnit pořadí, kombinovat a eliminovat operace s plovoucí desetinou čárkou kolem volání _status87, _statusfpa souvisejících funkcí. Pomocí možnosti kompilátoru /Od (Disable (Debug)) nebo direktivy fenv_access pragma zabráníte optimalizacím, které změní pořadí operací s plovoucí desetinou čárkou. Návratové hodnoty z _clearfp a _statusfp, a také návratové _statusfp2parametry , jsou spolehlivější, pokud se mezi známými stavy stavového slova s plovoucí desetinou čárkou provádí méně operací s plovoucí desetinou čárkou.

Poznámky

Funkce _statusfp získá stavové slovo s plovoucí desetinou čárkou. Stavové slovo je kombinací stavu procesoru s plovoucí deseti čárkou a dalších podmínek zjištěných obslužnou rutinou výjimky s plovoucí desetinou čárkou , například přetečení zásobníku s plovoucí desetinou čárkou a podtečení. Před vrácením obsahu stavového slova se kontrolují nemaskované výjimky. Jinými slovy, volající je informován o nevyřízených výjimkách. Na platformách _statusfp x86 vrátí kombinaci stavu x87 a SSE2 s plovoucí desetinou čárkou. Na platformách x64 je vrácen stav založený na stavu MXCSR služby SSE. Na platformách _statusfp ARM64 vrátí stav z registru FPSCR.

_statusfp je nezávislá na platformě, přenosná verze _status87. Je stejný jako _status87 na platformách Intel (x86) a podporuje se také platformami x64 a ARM64. Pokud chcete zajistit, aby byl kód s plovoucí deseti čárkou přenosný do všech architektur, použijte _statusfp. Pokud cílíte jenom na platformy x86, můžete použít buď _status87 nebo _statusfp.

Doporučujeme _statusfp2 pro čipy (například Pentium IV), které mají procesor x87 i SSE2 s plovoucí desetinou čárkou. Pro _statusfp2, adresy jsou vyplněny pomocí stavového slova s plovoucí desetinou čárkou pro procesor x87 nebo SSE2 s plovoucí desetinou čárkou. Pro čip, který podporuje procesory s plovoucí desetinou čárkou x87 a SSE2, je nastaven na hodnotu 1, EM_AMBIGUOUS pokud _statusfp nebo _controlfp je použita a akce byla nejednoznačná, protože by mohla odkazovat na stavové slovo x87 nebo SSE2 s plovoucí desetinou čárkou. Funkce _statusfp2 je podporována pouze na platformách x86.

Tyto funkce nejsou užitečné pro /clr (Common Language Runtime Compilation), protože modul CLR (Common Language Runtime) podporuje pouze výchozí přesnost s plovoucí desetinnou čárkou.

Požadavky

Rutina Požadovaný hlavičkový soubor
_status87, _statusfp, _statusfp2 <float.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

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

Viz také

Podpora pro matematiku a plovoucí desetinou čárku
_clear87, _clearfp
_control87, _controlfp, __control87_2