Headers fenv.h(3HEAD)
NAME
fenv.h, fenv - floating-point environment
SYNOPSIS
#include
DESCRIPTION
The
typedef:header defines the following data types through fenv_t Represents the entire floating-point environ-
ment. The floating-point environment refers
collectively to any floating-point status flags
and control modes supported by the implementa-
tion.fexcept_t Represents the floating-point status flags col-
lectively, including any status the implementa-
tion associates with the flags. A floating-
point status flag is a system variable whose value is set (but never cleared) when afloating-point exception is raised, which
occurs as a side effect of exceptionalfloating-point arithmetic to provide auxiliary
information. A floating-point control mode is a
system variable whose value can be set by the user to affect the subsequent behavior offloating-point arithmetic.
The
header defines the following constants if and only if the implementation supports the floating-point
exception by means of the floating-point functions
feclearexcept(), fegetexceptflag(), feraiseexcept(), fesetexceptflag(), and fetestexcept(). Each expands to aninteger constant expression with values such that bitwise-
inclusive ORs of all combinations of the constants result in distinct values.FE_DIVBYZERO
FE_INEXACT
FE_INVALID
FE_OVERFLOW
FE_UNDERFLOW
The
header defines the following constant, which is simply the bitwise-inclusive OR of all floating-point
SunOS 5.11 Last change: 15 Dec 2003 1
Headers fenv.h(3HEAD)
exception constants defined above:FE_ALL_EXCEPT
The
expands to an integer constant expression whose values areheader defines the following constants. Each distinct non-negative values.
FE_DOWNWARD
FE_TONEAREST
FE_TOWARDZERO
FE_UPWARD
The
header defines the following constant, which represents the default floating-point environment (that is,
the one installed at program startup) and has type pointerto const-qualified fenv_t. It can be used as an argument to
the functions within the
header that manage the floating-point environment.
FE_DFL_ENV
The FENV_ACCESS pragma provides a means to inform the imple-
mentation when an application might access the floating-
point environment to test floating-point status flags or run
under non-default floating-point control modes. The pragma
occurs either outside external declarations or preceding all explicit declarations and statements inside a compound statement. When outside external declarations, the pragmatakes effect from its occurrence until another FENV_ACCESS
pragma is encountered, or until the end of the translation unit. When inside a compound statement, the pragma takeseffect from its occurrence until another FENV_ACCESS pragma
is encountered (including within a nested compound state-
ment), or until the end of the compound statement; at the end of a compound statement the state for the pragma isrestored to its condition just before the compound state-
ment. If this pragma is used in any other context, the behavior is undefined.If part of an application tests floating-point status flags,
sets floating-point control modes, or runs under non-default
mode settings, but was translated with the state for theFENV_ ACCESS pragma off, the behavior is undefined. The
default state (on or off) for the pragma is implementation-
SunOS 5.11 Last change: 15 Dec 2003 2
Headers fenv.h(3HEAD)
defined. (When execution passes from a part of the applica-
tion translated with FENV_ACCESS off to a part translated
with FENV_ACCESS on, the state of the floating-point status
flags is unspecified and the floating-point control modes
have their default settings.)USAGE
This header is designed to support the floating-point excep-
tion status flags and directed-rounding control modes
required by the IEC 60559: 1989 standard, and other similarfloating-point state information. Also, it is designed to
facilitate code portability among all systems. Certain application programming conventions support the intendedmodel of use for the floating-point environment:
o A function call does not alter its caller'sfloating-point control modes, clear its caller's
floating-point status flags, or depend on the state
of its caller's floating-point status flags unless
the function is so documented. o A function call is assumed to require defaultfloating-point control modes, unless its documenta-
tion promises otherwise. o A function call is assumed to have the potentialfor raising floating-point exceptions, unless its
documentation promises otherwise. With these conventions, an application can safely assumedefault floating-point control modes (or be unaware of
them). The responsibilities associated with accessing thefloating-point environment fall on the application that does
so explicitly. Even though the rounding direction macros might expand toconstants corresponding to the values of FLT_ROUNDS, they
are not required to do so. For example:#include
void f(double x) {#pragma STDC FENV_ACCESS ON
void g(double); void h(double); /* ... */ g(x + 1); h(x + 1); /* ... */ }SunOS 5.11 Last change: 15 Dec 2003 3
Headers fenv.h(3HEAD)
If the function g() might depend on status flags set as a side effect of the first x+1, or if the second x+1 might depend on control modes set as a side effect of the call tofunction g(), then the application must contain an appropri-
ately placed invocation as follows:#pragma STDC FENV_ACCESS ON
ATTRIBUTES
See attributes(5) for descriptions of the following attri-
butes:____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|_____________________________|_____________________________|
| Interface Stability | Committed ||_____________________________|_____________________________|
| Standard | See standards(5). ||_____________________________|_____________________________|
SEE ALSO
feclearexcept(3M), fegetenv(3M), fegetexceptflag(3M), fegetround(3M), feholdexcept(3M), feraiseexcept(3M), fesetenv(3M), fesetexceptflag(3M), fesetround(3M),fetestexcept(3M), feupdateenv(3M), attributes(5), stan-
dards(5)SunOS 5.11 Last change: 15 Dec 2003 4