Home | History | Annotate | Download | only in include
      1 /* Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
      2    This file is part of the GNU C Library.
      3 
      4    The GNU C Library is free software; you can redistribute it and/or
      5    modify it under the terms of the GNU Lesser General Public
      6    License as published by the Free Software Foundation; either
      7    version 2.1 of the License, or (at your option) any later version.
      8 
      9    The GNU C Library is distributed in the hope that it will be useful,
     10    but WITHOUT ANY WARRANTY; without even the implied warranty of
     11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12    Lesser General Public License for more details.
     13 
     14    You should have received a copy of the GNU Lesser General Public
     15    License along with the GNU C Library; if not, write to the Free
     16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
     17    02111-1307 USA.  */
     18 
     19 /*
     20  * ISO C99 7.6: Floating-point environment	<fenv.h>
     21  */
     22 
     23 #ifndef _FENV_H
     24 #define _FENV_H	1
     25 
     26 #include <features.h>
     27 
     28 /* Get the architecture dependend definitions.  The following definitions
     29    are expected to be done:
     30 
     31    fenv_t	type for object representing an entire floating-point
     32 		environment
     33 
     34    FE_DFL_ENV	macro of type pointer to fenv_t to be used as the argument
     35 		to functions taking an argument of type fenv_t; in this
     36 		case the default environment will be used
     37 
     38    fexcept_t	type for object representing the floating-point exception
     39 		flags including status associated with the flags
     40 
     41    The following macros are defined iff the implementation supports this
     42    kind of exception.
     43    FE_INEXACT		inexact result
     44    FE_DIVBYZERO		division by zero
     45    FE_UNDERFLOW		result not representable due to underflow
     46    FE_OVERFLOW		result not representable due to overflow
     47    FE_INVALID		invalid operation
     48 
     49    FE_ALL_EXCEPT	bitwise OR of all supported exceptions
     50 
     51    The next macros are defined iff the appropriate rounding mode is
     52    supported by the implementation.
     53    FE_TONEAREST		round to nearest
     54    FE_UPWARD		round toward +Inf
     55    FE_DOWNWARD		round toward -Inf
     56    FE_TOWARDZERO	round toward 0
     57 */
     58 #include <bits/fenv.h>
     59 
     60 __BEGIN_DECLS
     61 
     62 /* Floating-point exception handling.  */
     63 
     64 /* Clear the supported exceptions represented by EXCEPTS.  */
     65 extern int feclearexcept (int __excepts) __THROW;
     66 
     67 /* Store implementation-defined representation of the exception flags
     68    indicated by EXCEPTS in the object pointed to by FLAGP.  */
     69 extern int fegetexceptflag (fexcept_t *__flagp, int __excepts) __THROW;
     70 
     71 /* Raise the supported exceptions represented by EXCEPTS.  */
     72 extern int feraiseexcept (int __excepts) __THROW;
     73 
     74 /* Set complete status for exceptions indicated by EXCEPTS according to
     75    the representation in the object pointed to by FLAGP.  */
     76 extern int fesetexceptflag (__const fexcept_t *__flagp, int __excepts) __THROW;
     77 
     78 /* Determine which of subset of the exceptions specified by EXCEPTS are
     79    currently set.  */
     80 extern int fetestexcept (int __excepts) __THROW;
     81 
     82 
     83 /* Rounding control.  */
     84 
     85 /* Get current rounding direction.  */
     86 extern int fegetround (void) __THROW;
     87 
     88 /* Establish the rounding direction represented by ROUND.  */
     89 extern int fesetround (int __rounding_direction) __THROW;
     90 
     91 
     92 /* Floating-point environment.  */
     93 
     94 /* Store the current floating-point environment in the object pointed
     95    to by ENVP.  */
     96 extern int fegetenv (fenv_t *__envp) __THROW;
     97 
     98 /* Save the current environment in the object pointed to by ENVP, clear
     99    exception flags and install a non-stop mode (if available) for all
    100    exceptions.  */
    101 extern int feholdexcept (fenv_t *__envp) __THROW;
    102 
    103 /* Establish the floating-point environment represented by the object
    104    pointed to by ENVP.  */
    105 extern int fesetenv (__const fenv_t *__envp) __THROW;
    106 
    107 /* Save current exceptions in temporary storage, install environment
    108    represented by object pointed to by ENVP and raise exceptions
    109    according to saved exceptions.  */
    110 extern int feupdateenv (__const fenv_t *__envp) __THROW;
    111 
    112 
    113 /* Include optimization.  */
    114 #ifdef __OPTIMIZE__
    115 # include <bits/fenvinline.h>
    116 #endif
    117 
    118 #ifdef __USE_GNU
    119 
    120 /* Enable individual exceptions.  Will not enable more exceptions than
    121    EXCEPTS specifies.  Returns the previous enabled exceptions if all
    122    exceptions are successfully set, otherwise returns -1.  */
    123 extern int feenableexcept (int __excepts) __THROW;
    124 
    125 /* Disable individual exceptions.  Will not disable more exceptions than
    126    EXCEPTS specifies.  Returns the previous enabled exceptions if all
    127    exceptions are successfully disabled, otherwise returns -1.  */
    128 extern int fedisableexcept (int __excepts) __THROW;
    129 
    130 /* Return enabled exceptions.  */
    131 extern int fegetexcept (void) __THROW;
    132 #endif
    133 
    134 __END_DECLS
    135 
    136 #endif /* fenv.h */
    137