Next: Exact Floating-Point Arithmetic, Previous: Invalid Optimizations, Up: Floating Point in Depth [Contents][Index]
Sticky exception flags record the occurrence of particular conditions: once set, they remain set until the program explicitly clears them.
The conditions include invalid operand,
division-by_zero, inexact result (i.e., one that
required rounding), underflow, and overflow. Some
extended floating-point designs offer several additional exception
flags. The functions feclearexcept
, feraiseexcept
,
fetestexcept
, fegetexceptflags
, and
fesetexceptflags
provide a standardized interface to those
flags. See Status bit operations in The GNU C Library
Reference Manual.
One important use of those flags is to do a
computation that is normally expected to be exact in floating-point
arithmetic, but occasionally might not be, in which case, corrective
action is needed. You can clear the inexact result flag with a
call to feclearexcept (FE_INEXACT)
, do the computation, and
then test the flag with fetestexcept (FE_INEXACT)
; the result
of that call is 0 if the flag is not set (there was no rounding), and
1 when there was rounding (which, we presume, implies the program has
to correct for that).