_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
_statusfp
Bity _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
, _statusfp
a 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é _statusfp2
parametry , 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