
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 */