_status87, _statusfp, _statusfp2
Získá stavové slovo s plovoucí desetinnou čárkou.
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 s plovoucí desetinnou čárkou x87.pSSE2
Tato adresa je vyplněna stavovým slovem pro jednotku s plovoucí desetinnou čárkou SSE2.
Vrácená hodnota
Pro _status87 a _statusfp bity ve vrácené hodnotě označují stav ovládacího prvku s plovoucí desetinnou čárkou.V souboru include FLOAT.H naleznete definici bitů, které jsou vráceny pomocí funkcí _statusfp.Mnoho matematických knihovních funkcí upravuje stavové slovo s plovoucí desetinnou čárkou s nepředvídatelnými výsledky.Optimalizace pořadí, kombinovat a eliminovat tyto operace kolem volání _status87, _statusfpa související funkce.Použití /Od (Zakázat (ladění)) možnost kompilátoru nebo fenv_access směrnice pragma zabránit optimalizací, které pořadí operace s plovoucí desetinnou čárkou.Návratové hodnoty z _clearfp a _statusfpa také návrat parametry _statusfp2, jsou spolehlivější, méně tyto operace jsou prováděny mezi státy známé slovo stav s plovoucí desetinnou čárkou.
Poznámky
Funkce _statusfp získává stavové slovo s plovoucí desetinnou čárkou.Stavové slovo je kombinací stav procesoru s plovoucí desetinnou čárkou a dalších podmínek zjištěných obslužnou rutinou výjimky s plovoucí desetinnou čárkou, například přetečení a podtečení zásobníku s plovoucí desetinnou čárkou.Nemaskované výjimky jsou kontrolovány před vrácením obsahu stavového slova.To znamená, že volající je informován o čekajících výjimkách.Na platformách x86 platformách _statusfp vrací kombinaci stavů s plovoucí desetinnou čárkou x87 a SSE2.Na platformách x64 stav, který je vrácen, je založen na stavu MXCSR SSE.Na platformách ARM _statusfp vrátí stav z registru FPSCR.
_statusfp je na platformě nezávislá, přenosná verze _status87.Je shodné s _status87 na platformách Intel (x86) a je také podporováno platformami x64 a ARM.Chcete-li zajistit, že váš kód s plovoucí desetinnou čárkou je přenosný na všechny architektury, použijte _statusfp.Pokud cílíte pouze platformy x86, můžete použít buď _status87 nebo _statusfp.
Doporučujeme _statusfp2 pro čipy (například Pentium IV), které mají procesor s plovoucí desetinnou čárkou x87 i SSE2.Pro _statusfp2 jsou adresy vyplněny pomocí stavového slova s plovoucí desetinnou čárkou pro procesor s plovoucí desetinnou čárkou x87 nebo SSE2.Pro čip, který podporuje procesory s plovoucí desetinnou čárkou x87 a SSE2 je EM_AMBIGUOUS nastavena na 1, pokud se používá _statusfp nebo _controlfp a akce byla nejednoznačná, protože by mohla odkazovat na stavové slovo stav s plovoucí desetinnou čárkou x87 nebo SSE2.Funkce _statusfp2 je podporována pouze na platformách x86.
Tyto funkce jsou užitečné pro ne /clr (Common Language Runtime) nebo /clr:pure kompilace protože společný jazykový modul runtime (CLR) podporuje pouze výchozí přesnost s plovoucí desetinnou čárkou.
Požadavky
Rutina |
Požadované záhlaví |
---|---|
_status87, _statusfp, _statusfp2 |
<float.h> |
Další informace o kompatibilitě naleznete 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();
}
Ekvivalent v rozhraní .NET Framework
Nelze použít. Pokud chcete volat standardní funkci jazyka C, použijte PInvoke. Další informace naleznete v tématu Příklady vyvolání platformy.