Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Gets and clears the floating-point status word.
Syntax
unsigned int _clear87( void );
unsigned int _clearfp( void );
Return value
The bits in the value returned indicate the floating-point status before the call to _clear87
or _clearfp
. For a complete definition of the bits returned by _clear87
, see Float.h. Many of the math library functions modify the 8087/80287 status word, with unpredictable results. Return values from _clear87
and _status87
become more reliable as fewer floating-point operations are performed between known states of the floating-point status word.
Remarks
The _clear87
function clears the exception flags in the floating-point status word, sets the busy bit to 0, and returns the status word. The floating-point status word is a combination of the 8087/80287 status word and other conditions detected by the 8087/80287 exception handler, such as floating-point stack overflow and underflow.
_clearfp
is a platform-independent, portable version of the _clear87
routine. It's identical to _clear87
on Intel (x86) platforms and is also supported by the x64 and ARM platforms. To ensure that your floating-point code is portable to x64 and ARM, use _clearfp
. If you're only targeting x86 platforms, you can use either _clear87
or _clearfp
.
These functions are deprecated when compiling with /clr (Common Language Runtime Compilation) because the common language runtime only supports the default floating-point precision.
Requirements
Routine | Required header |
---|---|
_clear87 |
<float.h> |
_clearfp |
<float.h> |
For more compatibility information, see Compatibility.
Example
// 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
See also
Math and floating-point support
_control87
, _controlfp
, __control87_2
_status87
, _statusfp
, _statusfp2