Provided by: manpages-es-dev_4.26.0-1_all 

NOMBRE
feclearexcept, fegetexceptflag, feraiseexcept, fesetexceptflag, fetestexcept, fegetenv, fegetround,
feholdexcept, fesetround, fesetenv, feupdateenv, feenableexcept, fedisableexcept, fegetexcept - redondeo
de coma flotante y gestión de excepciones
BIBLIOTECA
Biblioteca Matemática (libm, -lm)
SINOPSIS
#include <fenv.h>
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);
DESCRIPCIÓN
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 excepción «dividir entre cero» (divide-by-zero) ocurre cuando una operación sobre números finitos
produce infinito como resultado exacto.
La excepción «desbordamiento por arriba» (overflow) ocurre cuando un resultado tiene que ser representado
como un número en coma flotante, pero su valor absoluto es (mucho) más grande.
La excepción «desbordamiento por abajo» (underflow) ocurre cuando un resultado tiene que ser representado
como un número en coma flotante, pero su valor absoluto es más pequeño que el número positivo en coma
flotante normalizado más pequeño (y se perdería mucha precisión si se representara como un número
desnormalizado).
The exception «inexacto» (Inexact) se produce cuando el resultado redondeado de una operación no es igual
al resultado de precisión infinita. Puede ocurrir siempre que se produzca un desbordamiento por arriba
(overflow) o por abajo (underflow).
La excepción «inválido» (invalid) ocurre cuando no hay un resultado definido para una operación, 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 (excepción presente/ausente), que
se sitúa dentro de un entero de alguna manera definida por la implementación, y también como una
estructura opaca que puede contener más información sobre la excepción (tal vez la dirección dentro del
código donde se produjo).
Cada una de las macros FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW, FE_UNDERFLOW se define cuando
la implementación soporta el manejo de la correspondiente excepción, definiendose también 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 está formada mediante un OR lógico con todos los bits que se corresponden con excepciones
soportadas.
La función feclearexcept() limpia las excepciones soportadas representadas por los bits de su argumento.
La función fegetexceptflag() almacena una representación del estado de las banderas de excepción
representadas por el argumento excepts en el objeto opaco *flagp.
La función feraiseexcept() lanza las excepciones soportadas representadas por los bits en excepts.
La función fesetexceptflag() configura por completo la situación de las excepciones representadas por
excepts según el valor dado por *flagp. Este valor debe haber sido obtenido mediante una llamada previa a
fegetexceptflag() con un último argumento que tuviera todos los bits en excepts.
La función fetestexcept() devuelve una palabra en la que los bits activos son aquellos que estaban
activos en el argumento excepts y para los que la excepción correspondiente está 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
implementación soporta el obtener y establecer la correspondiente dirección de redondeo.
La función fegetround() devuelve la macro correspondiente al modo actual de redondeo.
La función fesetround() fija el modo de redondeo según especifique su argumento y devuelve cero cuando
tiene éxito.
C99 and POSIX.1-2008 specify an identifier, FLT_ROUNDS, defined in <float.h>, 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 número más próximo.
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 configuración del entorno al inicio de la
ejecución de un programa y, según establece el ISO C, equivale a redondear al más cercano, tener todas
las expeciones desactivadas y usar un modo de no-parada (continuar en excepciones).
La función fegetenv() guarda el entorno de coma flotante actual en el objeto *envp.
La función feholdexcept() hace lo mismo y a continuación limpia todas las banderas de excepción y
establece un modo de no-parada (continuar en excepciones), si ésto es posible. Devuelve cero cuando tiene
éxito.
La función fesetenv() restablece el entorno de coma flotante según el objeto *envp. Debemos asegurarnos
de que este objeto es válido, es decir, de que es el resultado de una llamada a fegetenv() o
feholdexcept() o de que es igual a FE_DFL_ENV. Ésta llamada no provoca excepciones.
La función feupdateenv() instala el entorno de coma flotante representado por el objeto *envp, pero no
desactiva las excepciones actualmente lanzadas. Tras llamar a esta función, las excepciones lanzadas
vendrán dadas por el resultado de un O-lógico entre aquellas previamente activas y las que haya en *envp.
Como antes, debemos asegurarnos de que el objeto *envp es válido.
VALOR DEVUELTO
Estas funciones devuelven cero si no ocurre ningún error y un valor distinto de cero si ocurre algún
error.
ATRIBUTOS
Para obtener una explicación de los términos usados en esta sección, véase attributes(7).
┌──────────────────────────────────────────────────────────────┬────────────────────┬───────────────────┐
│ Interfaz │ Atributo │ Valor │
├──────────────────────────────────────────────────────────────┼────────────────────┼───────────────────┤
│ feclearexcept(), fegetexceptflag(), feraiseexcept(), │ Seguridad del hilo │ Multi-hilo seguro │
│ fesetexceptflag(), fetestexcept(), fegetround(), │ │ │
│ fesetround(), fegetenv(), feholdexcept(), fesetenv(), │ │ │
│ feupdateenv(), feenableexcept(), fedisableexcept(), │ │ │
│ fegetexcept() │ │ │
└──────────────────────────────────────────────────────────────┴────────────────────┴───────────────────┘
ESTÁNDARES
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 <fenv.h>
int feenableexcept(int excepts);
int fedisableexcept(int excepts);
int fegetexcept(void);
Las funciones feenableexcept() y fedisableexcept() habilitan (deshabilitan) trampas para cada excepción
representada por excepts y devuelven el conjunto previo de excepciones habilitadas cuando tienen éxito y
-1 en caso contrario. La función 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.
VÉASE TAMBIÉN
math_error(7)
TRADUCCIÓN
La traducción al español de esta página del manual fue creada por Miguel Pérez Ibars <mpi79470@alu.um.es>
y Marcos Fouces <marcos@debian.org>
Esta traducción es documentación libre; lea la GNU General Public License Version 3 o posterior con
respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.
Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a
debian-l10n-spanish@lists.debian.org.
Páginas de Manual de Linux 6.9.1 2 Mayo 2024 fenv(3)