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

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.
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

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

Articulos interesantes...