Provided by: manpages-es-dev_4.18.1-1_all bug

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.

VERSIONES

       Estas funciones han sido añadidas en la versión 2.1 de glibc.

ATRIBUTOS

       Para obtener una explicación de los términos usados en esta sección, véase attributes(7).

       ┌────────────────────────────────────────────────┬────────────────────┬───────────────────┐
       │InterfazAtributoValor             │
       ├────────────────────────────────────────────────┼────────────────────┼───────────────────┤
       │feclearexcept(), fegetexceptflag(),             │ Seguridad del hilo │ Multi-hilo seguro │
       │feraiseexcept(), fesetexceptflag(),             │                    │                   │
       │fetestexcept(), fegetround(), fesetround(),     │                    │                   │
       │fegetenv(), feholdexcept(), fesetenv(),         │                    │                   │
       │feupdateenv(), feenableexcept(),                │                    │                   │
       │fedisableexcept(), fegetexcept()                │                    │                   │
       └────────────────────────────────────────────────┴────────────────────┴───────────────────┘

ESTÁNDARES

       IEC 60559 (IEC 559:1989), ANSI/IEEE 854, C99, POSIX.1-2001.

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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.