La función feholdexcept() en C/C++ primero guarda el entorno de coma flotante actual en el objeto de fenv_t y luego restablece los valores actuales de todas las banderas de estado de coma flotante. La función feholdexcept() se define en el archivo de encabezado cfenv en C++ y en el archivo de encabezado fenv.h en C .
Sintaxis:
int feholdexcept( fenv_t* envp )
Parámetros: la función acepta un solo parámetro obligatorio envp que es un puntero a un objeto
de tipo fenv_t que almacena el estado actual del entorno de coma flotante.
Valor devuelto: la función devuelve un valor int en dos condiciones:
- Si la función se completó con éxito, devuelve 0.
- En caso de falla, devuelve un entero distinto de cero.
Los siguientes programas ilustran la función anterior.
Programa 1:
CPP
// C++ program to illustrate the // feholdexcept() function #include <bits/stdc++.h> #pragma STDC FENV_ACCESS on // function to divide double divide(double x, double y) { // environment variable fenv_t envp; // do the division double ans = x / y; // use the function feholdexcept feholdexcept(&envp); // clears exception feclearexcept(FE_OVERFLOW | FE_DIVBYZERO); return ans; } int main() { // It is a combination of all of // the possible floating-point exception feclearexcept(FE_ALL_EXCEPT); double x = 10; double y = 0; // it returns the division of x and y printf("x/y = %f\n", divide(x, y)); // the function does not throw // any exception on division by 0 if (!fetestexcept(FE_ALL_EXCEPT)) { printf("No exceptions raised"); } return 0; }
x/y = inf No exceptions raised
Programa 2:
CPP
// C++ program to illustrate the // feholdexcept() function #include <bits/stdc++.h> #pragma STDC FENV_ACCESS on using namespace std; // function to print raised exceptions void raised_exceptions() { cout << "Exceptions raised are : "; if (fetestexcept(FE_DIVBYZERO)) cout << " FE_DIVBYZERO\n"; else if (fetestexcept(FE_INVALID)) cout << " FE_INVALID\n"; else if (fetestexcept(FE_OVERFLOW)) cout << " FE_OVERFLOW\n"; else if (fetestexcept(FE_UNDERFLOW)) cout << " FE_UNDERFLOW\n"; else cout << " No exception found\n"; return; } // Driver code int main() { // environment variable fenv_t envp; // raise certain exceptions feraiseexcept(FE_DIVBYZERO); // print the raised exception raised_exceptions(); // saves and clears current // exceptions by feholdexcept function feholdexcept(&envp); // no exception found raised_exceptions(); // restores the previously // saved exceptions feupdateenv(&envp); raised_exceptions(); return 0; }
Exceptions raised are : FE_DIVBYZERO Exceptions raised are : No exception found Exceptions raised are : FE_DIVBYZERO
Publicación traducida automáticamente
Artículo escrito por Aman Goyal 2 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA