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