summaryrefslogtreecommitdiffstats
path: root/man0p/fenv.h.0p
diff options
context:
space:
mode:
Diffstat (limited to 'man0p/fenv.h.0p')
-rw-r--r--man0p/fenv.h.0p247
1 files changed, 247 insertions, 0 deletions
diff --git a/man0p/fenv.h.0p b/man0p/fenv.h.0p
new file mode 100644
index 000000000..550806749
--- /dev/null
+++ b/man0p/fenv.h.0p
@@ -0,0 +1,247 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "<fenv.h>" P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" <fenv.h>
+.SH NAME
+fenv.h \- floating-point environment
+.SH SYNOPSIS
+.LP
+\fB#include <fenv.h>\fP
+.SH DESCRIPTION
+.LP
+The \fI<fenv.h>\fP header shall define the following data types through
+\fBtypedef\fP:
+.TP 7
+\fBfenv_t\fP
+Represents the entire floating-point environment. The floating-point
+environment refers collectively to any floating-point
+status flags and control modes supported by the implementation.
+.TP 7
+\fBfexcept_t\fP
+Represents the floating-point status flags collectively, including
+any status the implementation associates with the flags. A
+floating-point status flag is a system variable whose value is set
+(but never cleared) when a floating-point exception is raised,
+which occurs as a side effect of exceptional floating-point arithmetic
+to provide auxiliary information. A floating-point control
+mode is a system variable whose value may be set by the user to affect
+the subsequent behavior of floating-point arithmetic.
+.sp
+.LP
+The \fI<fenv.h>\fP header shall define the following constants if
+and only if the implementation supports the
+floating-point exception by means of the floating-point functions
+\fIfeclearexcept\fP(), \fIfegetexceptflag\fP(), \fIferaiseexcept\fP(),
+\fIfesetexceptflag\fP(), and \fIfetestexcept\fP(). Each expands to
+an integer constant expression with values such that
+bitwise-inclusive ORs of all combinations of the constants result
+in distinct values.
+.sp
+.RS
+.nf
+
+FE_DIVBYZERO
+FE_INEXACT
+FE_INVALID
+FE_OVERFLOW
+FE_UNDERFLOW
+.fi
+.RE
+.LP
+The \fI<fenv.h>\fP header shall define the following constant, which
+is simply the bitwise-inclusive OR of all
+floating-point exception constants defined above:
+.sp
+.RS
+.nf
+
+FE_ALL_EXCEPT
+.fi
+.RE
+.LP
+The \fI<fenv.h>\fP header shall define the following constants if
+and only if the implementation supports getting and
+setting the represented rounding direction by means of the \fIfegetround\fP()
+and \fIfesetround\fP() functions. Each expands to an integer constant
+expression whose values
+are distinct non-negative vales.
+.sp
+.RS
+.nf
+
+FE_DOWNWARD
+FE_TONEAREST
+FE_TOWARDZERO
+FE_UPWARD
+.fi
+.RE
+.LP
+The \fI<fenv.h>\fP header shall define the following constant, which
+represents the default floating-point environment
+(that is, the one installed at program startup) and has type pointer
+to const-qualified \fBfenv_t\fP. It can be used as an
+argument to the functions within the \fI<fenv.h>\fP header that manage
+the floating-point environment.
+.sp
+.RS
+.nf
+
+FE_DFL_ENV
+.fi
+.RE
+.LP
+The following shall be declared as functions and may also be defined
+as macros. Function prototypes shall be provided.
+.sp
+.RS
+.nf
+
+\fBint feclearexcept(int);
+int fegetexceptflag(fexcept_t *, int);
+int feraiseexcept(int);
+int fesetexceptflag(const fexcept_t *, int);
+int fetestexcept(int);
+int fegetround(void);
+int fesetround(int);
+int fegetenv(fenv_t *);
+int feholdexcept(fenv_t *);
+int fesetenv(const fenv_t *);
+int feupdateenv(const fenv_t *);
+\fP
+.fi
+.RE
+.LP
+The FENV_ACCESS pragma provides a means to inform the implementation
+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 shall occur
+either outside external declarations or preceding all explicit declarations
+and statements inside a compound statement. When
+outside external declarations, the pragma takes 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 takes effect from its occurrence until another
+FENV_ACCESS pragma is encountered (including within a nested compound
+statement), or until the end of the compound statement; at
+the end of a compound statement the state for the pragma is restored
+to its condition just before the compound statement. 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 the FENV_ACCESS pragma
+off, the behavior is undefined. The default state (on or off) for
+the pragma is implementation-defined. (When execution passes from
+a part of the application 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.)
+.LP
+\fIThe following sections are informative.\fP
+.SH APPLICATION USAGE
+.LP
+This header is designed to support the floating-point exception status
+flags and directed-rounding control modes required by the
+IEC\ 60559:1989 standard, and other similar floating-point state information.
+Also it is designed to facilitate code
+portability among all systems.
+.LP
+Certain application programming conventions support the intended model
+of use for the floating-point environment:
+.IP " *" 3
+A function call does not alter its caller's floating-point control
+modes, clear its caller's floating-point status flags, nor
+depend on the state of its caller's floating-point status flags unless
+the function is so documented.
+.LP
+.IP " *" 3
+A function call is assumed to require default floating-point control
+modes, unless its documentation promises otherwise.
+.LP
+.IP " *" 3
+A function call is assumed to have the potential for raising floating-point
+exceptions, unless its documentation promises
+otherwise.
+.LP
+.LP
+With these conventions, an application can safely assume default floating-point
+control modes (or be unaware of them). The
+responsibilities associated with accessing the floating-point environment
+fall on the application that does so explicitly.
+.LP
+Even though the rounding direction macros may expand to constants
+corresponding to the values of FLT_ROUNDS, they are not
+required to do so.
+.LP
+For example:
+.sp
+.RS
+.nf
+
+\fB#include <fenv.h>
+void f(double x)
+{
+ #pragma STDC FENV_ACCESS ON
+ void g(double);
+ void h(double);
+ /* ... */
+ g(x + 1);
+ h(x + 1);
+ /* ... */
+}
+\fP
+.fi
+.RE
+.LP
+If the function \fIg\fP() might depend on status flags set as a side
+effect of the first \fIx\fP+1, or if the second
+\fIx\fP+1 might depend on control modes set as a side effect of the
+call to function \fIg\fP(), then the application shall
+contain an appropriately placed invocation as follows:
+.sp
+.RS
+.nf
+
+\fB#pragma STDC FENV_ACCESS ON
+\fP
+.fi
+.RE
+.SH RATIONALE
+.SS The fexcept_t Type
+.LP
+\fBfexcept_t\fP does not have to be an integer type. Its values must
+be obtained by a call to \fIfegetexceptflag\fP(), and cannot be created
+by logical operations from the exception
+macros. An implementation might simply implement \fBfexcept_t\fP as
+an \fBint\fP and use the representations reflected by the
+exception macros, but is not required to; other representations might
+contain extra information about the exceptions.
+\fBfexcept_t\fP might be a \fBstruct\fP with a member for each exception
+(that might hold the address of the first or last
+floating-point instruction that caused that exception). The ISO/IEC\ 9899:1999
+standard makes no claims about the internals of
+an \fBfexcept_t\fP, and so the user cannot inspect it.
+.SS Exception and Rounding Macros
+.LP
+Macros corresponding to unsupported modes and rounding directions
+are not defined by the implementation and must not be defined
+by the application. An application might use \fB#ifdef\fP to test
+for this.
+.SH FUTURE DIRECTIONS
+.LP
+None.
+.SH SEE ALSO
+.LP
+The System Interfaces volume of IEEE\ Std\ 1003.1-2001, \fIfeclearexcept\fP(),
+\fIfegetenv\fP(), \fIfegetexceptflag\fP(), \fIfegetround\fP(),
+\fIfeholdexcept\fP(), \fIferaiseexcept\fP(), \fIfesetenv\fP(), \fIfesetexceptflag\fP(),
+\fIfesetround\fP(),
+\fIfetestexcept\fP(), \fIfeupdateenv\fP()
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group. In the
+event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .