Floating-Point Bit Masks

Each bit mask corresponds to a unique floating-point exception that can be masked individually. The following bit mask values are defined in <float.h>.

Bit Mask Description
EM_INVALID Mask exceptions resulting from floating-point operations that are not valid. Such an exception can be caused by a floating-point value that is not valid, such as a signaling NaN, or by a problem with the floating-point unit stack.
The corrective action taken by the 80387 chip is to return a quiet NaN.
This type of exception indicates a serious problem and you should not mask it off.
EM_DENORMAL Mask exceptions resulting from the use of floating-point values that have not been normalised. The corrective action is to use these values and allow for gradual underflow.
This type of exception is ignored by IBM C and C++ Compilers and is masked off by default.
EM_ZERODIVIDE Mask the divide-by-zero exception. A value of infinity is returned.
EM_OVERFLOW Mask the overflow exception. A value of infinity is returned.
EM_UNDERFLOW Mask the underflow exception. Either a denormalised number or zero is returned.
EM_INEXACT Mask the exception that indicates precision has been lost.
Because this type of exception is only useful when performing integer arithmetic, while the 80387 chip is used for floating-point arithmetic only, the exception is not meaningful and the 80387 chip ignores it.
This exception is masked off by default.

All floating-point exceptions are masked by default.

The first of the following statements masks the floating-point underflow exception from being reported, and the second statement masks it on again.

oldstate = _control87(EM_UNDERFLOW, EM_UNDERFLOW);
oldstate = _control87(0, EM_UNDERFLOW);



Signals and Exceptions


Exception Handling for Floating-Point Exceptions