_clear87
, _clearfp
Získá a vymaže stavové slovo s plovoucí desetinou čárkou.
Syntaxe
unsigned int _clear87( void );
unsigned int _clearfp( void );
Vrácená hodnota
Bity ve vrácené hodnotě označují stav s plovoucí desetinou čárkou před voláním _clear87
nebo _clearfp
. Úplnou definici bitů vrácených pomocí _clear87
funkce Float.h. Mnoho funkcí matematické knihovny upravuje stavové slovo 8087/80287 s nepředvídatelnými výsledky. Návratové hodnoty z _clear87
a _status87
jsou spolehlivější, protože mezi známými stavy stavového slova s plovoucí desetinou čárkou se provádí méně operací s plovoucí desetinou čárkou.
Poznámky
Funkce _clear87
vymaže příznaky výjimky ve stavovém slově s plovoucí desetinou čárkou, nastaví zaneprázdněný bit na hodnotu 0 a vrátí stavové slovo. Stavové slovo s plovoucí deseti čárkou je kombinací stavového slova 8087/80287 a dalších podmínek zjištěných obslužnou rutinou výjimky 8087/80287, například přetečení zásobníku s plovoucí desetinou čárkou a podtečením.
_clearfp
je nezávislá na platformě, přenosná verze rutiny _clear87
. Je stejný jako _clear87
na platformách Intel (x86) a podporuje se také platformami x64 a ARM. Pokud chcete zajistit, aby byl kód s plovoucí desetinou čárkou přenosný na x64 a ARM, použijte _clearfp
. Pokud cílíte jenom na platformy x86, můžete použít buď _clear87
nebo _clearfp
.
Tyto funkce jsou při kompilaci pomocí /clr (Common Language Runtime Compilation) zastaralé, protože modul CLR podporuje pouze výchozí přesnost s plovoucí desetinnou čárkou.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
_clear87 |
<float.h> |
_clearfp |
<float.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// crt_clear87.c
// compile with: /Od
// This program creates various floating-point
// problems, then uses _clear87 to report on these problems.
// Compile this program with Optimizations disabled (/Od).
// Otherwise the optimizer will remove the code associated with
// the unused floating-point values.
//
#include <stdio.h>
#include <float.h>
int main( void )
{
double a = 1e-40, b;
float x, y;
printf( "Status: %.4x - clear\n", _clear87() );
// Store into y is inexact and underflows:
y = a;
printf( "Status: %.4x - inexact, underflow\n", _clear87() );
// y is denormal:
b = y;
printf( "Status: %.4x - denormal\n", _clear87() );
}
Status: 0000 - clear
Status: 0003 - inexact, underflow
Status: 80000 - denormal
Viz také
Podpora pro matematiku a plovoucí desetinou čárku
_control87
, , _controlfp
__control87_2
_status87
, , _statusfp
_statusfp2