_clear87, _clearfp

Get and clear the floating-point status word.

unsigned int _clear87( void );

unsigned int _clearfp( void );

Routine Required Header Compatibility
_clear87 <float.h> Win 95, Win NT
_clearfp <float.h> Win 95, Win NT

For additional compatibility information, see Compatibility in the Introduction.

Libraries

LIBC.LIB Single thread static library, retail version
LIBCMT.LIB Multithread static library, retail version
MSVCRT.LIB Import library for MSVCRT.DLL, retail version

Return Value

The bits in the value returned indicate the floating-point status before the call to _clear87 or _clearfp. See FLOAT.H for a complete definition of the bits returned by _clear87. 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 is identical to _clear87 on IntelŪ (x86) platforms and is also supported by the MIPSŪ and ALPHA platforms. To ensure that your floating-point code is portable to MIPS or ALPHA, use _clearfp. If you are only targeting x86 platforms, you can use either _clear87 or _clearfp.

Example

/* CLEAR87.C: 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>

void 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() );
}

Output

Status: 0000 - clear
Status: 0003 - inexact, underflow
Status: 80000 - denormal
 

Floating-Point Support Routines

See Also   _control87, _status87