_clear87
, _clearfp
Ottiene e cancella la parola di stato a virgola mobile.
Sintassi
unsigned int _clear87( void );
unsigned int _clearfp( void );
Valore restituito
I bit nel valore restituito indicano lo stato a virgola mobile prima della chiamata a _clear87
o a _clearfp
. Per una definizione completa dei bit restituiti da _clear87
, vedere Float.h. Molte funzioni della libreria matematica modificano la parola di stato 8087/80287, con risultati imprevisti. I valori restituiti da _clear87
e _status87
diventano più affidabili se vengono eseguite meno operazioni a virgola mobile tra gli stati noti della parola di stato a virgola mobile.
Osservazioni:
La funzione _clear87
cancella i flag di eccezione nella parola di stato a virgola mobile, imposta il bit impegnato su 0 e restituisce la parola di stato. La parola di stato a virgola mobile è una combinazione della parola di stato 8087/80287 e di altre condizioni rilevate dal gestore eccezioni 8087/80287, come ad esempio l'overflow e underflow di stack a virgola mobile.
_clearfp
è una versione indipendente dalla piattaforma e portabile della routine _clear87
. È identico alle _clear87
piattaforme Intel (x86) ed è supportato anche dalle piattaforme x64 e ARM. Per assicurarsi che il codice a virgola mobile sia portabile su piattaforme x64 e ARM, usare _clearfp
. Se si usa solo piattaforme x86, è possibile usare _clear87
o _clearfp
.
Queste funzioni sono deprecate durante la compilazione con /clr (compilazione Common Language Runtime) perché Common Language Runtime supporta solo la precisione a virgola mobile predefinita.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
_clear87 |
<float.h> |
_clearfp |
<float.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// 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
Vedi anche
Supporto matematico e a virgola mobile
_control87
, _controlfp
, __control87_2
_status87
, _statusfp
, _statusfp2