La función fesetexceptflag () en C ++ establece indicadores de excepción de punto flotante especificados desde un objeto puntero en el entorno de punto flotante.
La función fesetexceptflag () se define en el archivo de encabezado.
prototipo fesetexceptflag ()
int fesetexceptflag (const fexcept_t * flagp, int excepciones);
La función fesetexceptflag () intenta copiar todo el contenido de los indicadores de excepción de punto flotante especificados por las excepciones de flagp en el entorno de punto flotante.
Esta función solo modifica las banderas y no genera ninguna excepción.
Parámetros de fesetexceptflag ()
- flagp: un puntero a un objeto fexcept_t desde donde se leerán las banderas.
- excepciones: lista de máscara de bits de los indicadores de excepción para establecer.
Macro | Tipo | Descripción |
---|---|---|
FE_DIVBYZERO | Error de polo | División por cero |
FE_INEXACT | Inexacto | Resultados no exactos como (1.0 / 3.0) |
FE_INVALID | Error de dominio | Al menos uno de los argumentos utilizados es un valor para el que la función no está definida |
FE_OVERFLOW | Error de rango de desbordamiento | El resultado es demasiado grande en magnitud para ser representado por el tipo de retorno |
FE_UNDERFLOW | Error de rango de subdesbordamiento | El resultado es demasiado pequeño en magnitud para ser representado por el tipo de retorno |
FE_ALL_EXCEPT | Todas las excepciones | Todas las excepciones respaldadas por la implementación |
fesetexceptflag () Valor de retorno
- La función fesetexceptflag () devuelve cero en caso de éxito, distinto de cero en caso contrario.
Ejemplo: ¿Cómo funciona la función fesetexceptflag ()?
#include #include #pragma STDC FENV_ACCESS ON using namespace std; void print_exceptions() ( cout << "Raised exceptions: "; if(fetestexcept(FE_ALL_EXCEPT)) ( if(fetestexcept(FE_DIVBYZERO)) cout << "FE_DIVBYZERO "; if(fetestexcept(FE_INEXACT)) cout << "FE_INEXACT "; if(fetestexcept(FE_INVALID)) cout << "FE_INVALID "; if(fetestexcept(FE_OVERFLOW)) cout << "FE_OVERFLOW "; if(fetestexcept(FE_UNDERFLOW)) cout << "FE_UNDERFLOW "; ) else cout << "None"; cout << endl; ) int main() ( fexcept_t excepts; feraiseexcept(FE_DIVBYZERO); /* save current state*/ fegetexceptflag(&excepts,FE_ALL_EXCEPT); print_exceptions(); feraiseexcept(FE_INVALID|FE_OVERFLOW); print_exceptions(); /* restoring previous exceptions */ fesetexceptflag(&excepts,FE_ALL_EXCEPT); print_exceptions(); return 0; )
Cuando ejecute el programa, la salida será:
Excepciones planteadas: FE_DIVBYZERO Excepciones planteadas: FE_DIVBYZERO FE_INVALID FE_OVERFLOW Excepciones planteadas: FE_DIVBYZERO