fegetenv, fesetenv
|
Definido en el encabezado
<fenv.h>
|
||
|
int
fegetenv
(
fenv_t
*
envp
)
;
|
(1) | (desde C99) |
|
int
fesetenv
(
const
fenv_t
*
envp
)
;
|
(2) | (desde C99) |
1) Intenta almacenar el estado del entorno de punto flotante en el objeto apuntado por
envp
.
2) Intenta establecer el entorno de punto flotante desde el objeto apuntado por
envp
. El valor de ese objeto debe haberse obtenido previamente mediante una llamada a
feholdexcept
o
fegetenv
o ser una constante macro de punto flotante. Si alguna de las banderas de estado de punto flotante está activada en
envp
, se activarán en el entorno (y podrán verificarse con
fetestexcept
), pero las excepciones de punto flotante correspondientes no se generarán (la ejecución continúa sin interrupciones)
Contenidos |
Parámetros
| envp | - | puntero al objeto de tipo fenv_t que contiene el estado del entorno de punto flotante |
Valor de retorno
0 en caso de éxito, distinto de cero en caso contrario.
Ejemplo
#include <stdio.h> #include <math.h> #include <fenv.h> #pragma STDC FENV_ACCESS ON void show_fe_exceptions(void) { printf("excepciones actuales generadas: "); if(fetestexcept(FE_DIVBYZERO)) printf(" FE_DIVBYZERO"); if(fetestexcept(FE_INEXACT)) printf(" FE_INEXACT"); if(fetestexcept(FE_INVALID)) printf(" FE_INVALID"); if(fetestexcept(FE_OVERFLOW)) printf(" FE_OVERFLOW"); if(fetestexcept(FE_UNDERFLOW)) printf(" FE_UNDERFLOW"); if(fetestexcept(FE_ALL_EXCEPT)==0) printf(" ninguno"); printf("\n"); } void show_fe_rounding_method(void) { printf("método de redondeo actual: "); switch (fegetround()) { case FE_TONEAREST: printf ("FE_TONEAREST"); break; case FE_DOWNWARD: printf ("FE_DOWNWARD"); break; case FE_UPWARD: printf ("FE_UPWARD"); break; case FE_TOWARDZERO: printf ("FE_TOWARDZERO"); break; default: printf ("desconocido"); }; printf("\n"); } void show_fe_environment(void) { show_fe_exceptions(); show_fe_rounding_method(); } int main(void) { fenv_t curr_env; int rtn; /* Mostrar entorno predeterminado. */ show_fe_environment(); printf("\n"); /* Realizar algunos cálculos bajo el entorno predeterminado. */ printf("+11.5 -> %+4.1f\n", rint(+11.5)); /* punto medio entre dos enteros */ printf("+12.5 -> %+4.1f\n", rint(+12.5)); /* punto medio entre dos enteros */ show_fe_environment(); printf("\n"); /* Guardar entorno actual. */ rtn = fegetenv(&curr_env); /* Realizar algunos cálculos con el nuevo método de redondeo. */ feclearexcept(FE_ALL_EXCEPT); fesetround(FE_DOWNWARD); printf("1.0/0.0 = %f\n", 1.0/0.0); printf("+11.5 -> %+4.1f\n", rint(+11.5)); printf("+12.5 -> %+4.1f\n", rint(+12.5)); show_fe_environment(); printf("\n"); /* Restaurar entorno anterior. */ rtn = fesetenv(&curr_env); show_fe_environment(); return 0; }
Salida:
excepciones actuales generadas: ninguna método de redondeo actual: FE_TONEAREST +11.5 -> +12.0 +12.5 -> +12.0 excepciones actuales generadas: FE_INEXACT método de redondeo actual: FE_TONEAREST 1.0/0.0 = inf +11.5 -> +11.0 +12.5 -> +12.0 excepciones actuales generadas: FE_DIVBYZERO FE_INEXACT método de redondeo actual: FE_DOWNWARD excepciones actuales generadas: FE_INEXACT método de redondeo actual: FE_TONEAREST
Referencias
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.6.4.1 La función fegetenv (p: 213)
-
- 7.6.4.3 La función fesetenv (p: 214)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.6.4.1 La función fegetenv (p: 194)
-
- 7.6.4.3 La función fesetenv (p: 195)
Véase también
|
(C99)
|
guarda el entorno, limpia todas las banderas de estado e ignora todos los errores futuros
(función) |
|
(C99)
|
restaura el entorno de punto flotante y genera las excepciones previamente generadas
(función) |
|
(C99)
|
entorno de punto flotante por defecto
(constante macro) |
|
Documentación de C++
para
fegetenv
,
fesetenv
|
|