C ++ fegetexceptflag () - Biblioteca estándar de C ++

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.
Macros aceptadas de máscara de bits
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

Articulos interesantes...