fenv(3) Library Functions Manual fenv(3) NOMBRE feclearexcept, fegetexceptflag, feraiseexcept, fesetexceptflag, fetestexcept, fegetenv, fegetround, feholdexcept, fesetround, fesetenv, feupdateenv, feenableexcept, fedisableexcept, fegetexcept - redondeo de coma flotante y gestion de excepciones BIBLIOTECA Biblioteca Matematica (libm, -lm) SINOPSIS #include int feclearexcept(int excepts); int fegetexceptflag(fexcept_t *flagp, int excepts); int feraiseexcept(int excepts); int fesetexceptflag(const fexcept_t *flagp, int excepts); int fetestexcept(int excepts); int fegetround(void); int fesetround(int rounding_mode); int fegetenv(fenv_t *envp); int feholdexcept(fenv_t *envp); int fesetenv(const fenv_t *envp); int feupdateenv(const fenv_t *envp); DESCRIPCION Estas once funciones fueron definidas dentro de C99 y describen el manejo del redondeo y de las excepciones (desbordamiento por arriba, dividir-entre-cero etc.) en coma flotante. Excepciones La excepcion <> (divide-by-zero) ocurre cuando una operacion sobre numeros finitos produce infinito como resultado exacto. La excepcion <> (overflow) ocurre cuando un resultado tiene que ser representado como un numero en coma flotante, pero su valor absoluto es (mucho) mas grande. La excepcion <> (underflow) ocurre cuando un resultado tiene que ser representado como un numero en coma flotante, pero su valor absoluto es mas pequeno que el numero positivo en coma flotante normalizado mas pequeno (y se perderia mucha precision si se representara como un numero desnormalizado). The exception <> (Inexact) se produce cuando el resultado redondeado de una operacion no es igual al resultado de precision infinita. Puede ocurrir siempre que se produzca un desbordamiento por arriba (overflow) o por abajo (underflow). La excepcion <> (invalid) ocurre cuando no hay un resultado definido para una operacion, como por ejemplo 0/0 o infinito - infinito o sqrt(-1). Manejo de excepciones Las excepciones se representan de dos maneras: como un bit individual (excepcion presente/ausente), que se situa dentro de un entero de alguna manera definida por la implementacion, y tambien como una estructura opaca que puede contener mas informacion sobre la excepcion (tal vez la direccion dentro del codigo donde se produjo). Cada una de las macros FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW, FE_UNDERFLOW se define cuando la implementacion soporta el manejo de la correspondiente excepcion, definiendose tambien el bit correspondiente, de forma que se pueda llamar a las funciones de manejo de excepciones usando p.e. el argumento entero FE_OVERFLOW|FE_UNDERFLOW. Otras excepciones pueden estar soportadas. La macro FE_ALL_EXCEPT esta formada mediante un OR logico con todos los bits que se corresponden con excepciones soportadas. La funcion feclearexcept() limpia las excepciones soportadas representadas por los bits de su argumento. La funcion fegetexceptflag() almacena una representacion del estado de las banderas de excepcion representadas por el argumento excepts en el objeto opaco *flagp. La funcion feraiseexcept() lanza las excepciones soportadas representadas por los bits en excepts. La funcion fesetexceptflag() configura por completo la situacion de las excepciones representadas por excepts segun el valor dado por *flagp. Este valor debe haber sido obtenido mediante una llamada previa a fegetexceptflag() con un ultimo argumento que tuviera todos los bits en excepts. La funcion fetestexcept() devuelve una palabra en la que los bits activos son aquellos que estaban activos en el argumento excepts y para los que la excepcion correspondiente esta activa actualmente. Modo de Redondeo The rounding mode determines how the result of floating-point operations is treated when the result cannot be exactly represented in the significand. Various rounding modes may be provided: round to nearest (the default), round up (toward positive infinity), round down (toward negative infinity), and round toward zero. Cada una de las macros FE_TONEAREST, FE_UPWARD, FE_DOWNWARD, y FE_TOWARDZERO se define cuando la implementacion soporta el obtener y establecer la correspondiente direccion de redondeo. La funcion fegetround() devuelve la macro correspondiente al modo actual de redondeo. La funcion fesetround() fija el modo de redondeo segun especifique su argumento y devuelve cero cuando tiene exito. C99 and POSIX.1-2008 specify an identifier, FLT_ROUNDS, defined in , which indicates the implementation-defined rounding behavior for floating-point addition. This identifier has one of the following values: -1 No se puede determinar el modo de redondeo. 0 El redondeo tiende a 0. 1 El redondeo tiende al numero mas proximo. 2 Rounding is toward positive infinity. 3 Rounding is toward negative infinity. Other values represent machine-dependent, nonstandard rounding modes. The value of FLT_ROUNDS should reflect the current rounding mode as set by fesetround() (but see BUGS). Entorno de coma flotante El entorno de coma flotante por completo, incluyendo los modos de control y las banderas de estado, puede ser manejado como un objeto opaco, de tipo fenv_t. El entorno por defecto se denota por FE_DFL_ENV (de tipo const fenv_t *). El entorno por defecto determina la configuracion del entorno al inicio de la ejecucion de un programa y, segun establece el ISO C, equivale a redondear al mas cercano, tener todas las expeciones desactivadas y usar un modo de no-parada (continuar en excepciones). La funcion fegetenv() guarda el entorno de coma flotante actual en el objeto *envp. La funcion feholdexcept() hace lo mismo y a continuacion limpia todas las banderas de excepcion y establece un modo de no-parada (continuar en excepciones), si esto es posible. Devuelve cero cuando tiene exito. La funcion fesetenv() restablece el entorno de coma flotante segun el objeto *envp. Debemos asegurarnos de que este objeto es valido, es decir, de que es el resultado de una llamada a fegetenv() o feholdexcept() o de que es igual a FE_DFL_ENV. Esta llamada no provoca excepciones. La funcion feupdateenv() instala el entorno de coma flotante representado por el objeto *envp, pero no desactiva las excepciones actualmente lanzadas. Tras llamar a esta funcion, las excepciones lanzadas vendran dadas por el resultado de un O-logico entre aquellas previamente activas y las que haya en *envp. Como antes, debemos asegurarnos de que el objeto *envp es valido. VALOR DEVUELTO Estas funciones devuelven cero si no ocurre ningun error y un valor distinto de cero si ocurre algun error. ATRIBUTOS Para obtener una explicacion de los terminos usados en esta seccion, vease attributes(7). +-----------------------------+--------------------+-------------------+ |Interfaz | Atributo | Valor | +-----------------------------+--------------------+-------------------+ |feclearexcept(), | Seguridad del hilo | Multi-hilo seguro | |fegetexceptflag(), | | | |feraiseexcept(), | | | |fesetexceptflag(), | | | |fetestexcept(), | | | |fegetround(), fesetround(), | | | |fegetenv(), feholdexcept(), | | | |fesetenv(), feupdateenv(), | | | |feenableexcept(), | | | |fedisableexcept(), | | | |fegetexcept() | | | +-----------------------------+--------------------+-------------------+ ESTANDARES C11, POSIX.1-2008, IEC 60559 (IEC 559:1989), ANSI/IEEE 854. HISTORIAL C99, POSIX.1-2001. glibc 2.1. NOTAS glibc notes If possible, the GNU C Library defines a macro FE_NOMASK_ENV which represents an environment where every exception raised causes a trap to occur. You can test for this macro using #ifdef. It is defined only if _GNU_SOURCE is defined. The C99 standard does not define a way to set individual bits in the floating-point mask, for example, to trap on specific flags. Since glibc 2.2, glibc supports the functions feenableexcept() and fedisableexcept() to set individual floating-point traps, and fegetexcept() to query the state. #define _GNU_SOURCE /* Vea feature_test_macros(7) */ #include int feenableexcept(int excepts); int fedisableexcept(int excepts); int fegetexcept(void); Las funciones feenableexcept() y fedisableexcept() habilitan (deshabilitan) trampas para cada excepcion representada por excepts y devuelven el conjunto previo de excepciones habilitadas cuando tienen exito y -1 en caso contrario. La funcion fegetexcept() devuelve el conjunto de todas las excepciones habilitadas actualmente. ERRORES C99 specifies that the value of FLT_ROUNDS should reflect changes to the current rounding mode, as set by fesetround(). Currently, this does not occur: FLT_ROUNDS always has the value 1. VEASE TAMBIEN math_error(7) TRADUCCION La traduccion al espanol de esta pagina del manual fue creada por Miguel Perez Ibars y Marcos Fouces Esta traduccion es documentacion libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. Si encuentra algun error en la traduccion de esta pagina del manual, envie un correo electronico a . Paginas de manual de Linux 6.06 31 Octubre 2023 fenv(3)