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

La función feclearexcept () en C ++ intenta borrar los indicadores de excepción de punto flotante especificados por el argumento excepts.

La función feclearexcept () se define en el archivo de encabezado.

feclearexcept () Prototipo

 int feclearexcept (int excepciones);

Para que la función funcione, debe habilitar FENV_ACCESS , lo que le permitirá a su programa acceder al entorno de punto flotante para probar las excepciones generadas.

Parámetros feclearexcept ()

  • excepciones: lista de máscara de bits de banderas de excepción para borrar
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

feclearexcept () Valor de retorno

  • La función feclearexcept () devuelve un valor cero si se borraron todas las excepciones o si las excepciones son iguales a cero.
  • Devuelve un valor distinto de cero si se produce algún error.

Ejemplo: ¿Cómo funciona la función feclearexcept ()?

 #include #include #include #pragma STDC FENV_ACCESS ON using namespace std; int main() ( // clears all exceptions feclearexcept(FE_ALL_EXCEPT); cout << "1/0 = " << 1.0/0.0 << endl; // tests if above statement raised the FE_DIVBYZERO exception if(fetestexcept(FE_DIVBYZERO)) ( cout << "FE_DIVBYZERO is set" << endl; ) else ( cout << "FE_DIVBYZERO is not set" << endl; ) feclearexcept(FE_ALL_EXCEPT); cout << "sqrt(-1) = " << sqrt(-1) << endl; if(fetestexcept(FE_INVALID)) ( cout << "FE_INVALID is set" << endl; ) else ( cout << "FE_INVALID is not set" << endl; ) )

Cuando ejecute el programa, la salida será:

 1/0 = inf FE_DIVBYZERO está establecido sqrt (-1) = -nan FE_INVALID está establecido

Articulos interesantes...