La función fegetexceptflag () en C ++ obtiene indicadores de excepción de punto flotante que especifican las excepciones del argumento, y lo almacena en el punto especificado por flagp.
La función fetgetexceptflag () se define en el archivo de encabezado.
prototipo fegetexceptflag ()
int fegetexceptflag (fexcept_t * flagp, int excepciones);
Las excepciones de argumento pueden ser un OR bit a bit de las macros de excepción de coma flotante.
Parámetros de fegetexceptflag ()
- flagp: un puntero a un objeto fexcept_t donde se almacenarán las banderas.
- excepciones: lista de máscara de bits de los indicadores de excepción a obtener.
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 |
fegetexceptflag () Valor de retorno
- La función fegetexceptflag () devuelve cero en caso de éxito, distinto de cero en caso contrario.
Ejemplo: ¿Cómo funciona la función fegetexceptflag ()?
#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