La función feupdateenv() en C++ primero guarda las excepciones de punto flotante generadas actualmente. Restaura el entorno de punto flotante del objeto fenv_t dado y luego genera las excepciones que se guardaron previamente.
Sintaxis:
int feupdateenv( fenv_t* envp )
Parámetros: acepta un solo parámetro obligatorio envp que especifica el puntero al objeto fenv_t que se establece mediante una llamada anterior a feholdexcept o fegetenv o es igual a FE_DFL_ENV . La función también acepta un puntero de tipo fenv_t como argumento que contiene un entorno de coma flotante establecido previamente mediante feholdexcept o fegetenv y restaura ese entorno de coma flotante junto con el entorno actual.
Valor devuelto: la función devuelve dos tipos de valor que se describen a continuación:
- Devuelve cero en caso de éxito.
- Devuelve un valor distinto de cero en caso de falla
Los siguientes programas ilustran la función anterior.
Programa 1:
CPP
// C++ program to illustrate the // feupdateenv() function #include <bits/stdc++.h> #pragma STDC FENV_ACCESS on // Function to use the function double answer(double y) { // struct defined fenv_t trial; // use the function feholdexcept feholdexcept(&trial); // find log value y = log(y); // clears exception feclearexcept(FE_OVERFLOW | FE_DIVBYZERO); // call the function for success or not feupdateenv(&trial); return y; } int main() { // It is a combination of all of // the possible floating-point exception feclearexcept(FE_ALL_EXCEPT); // it returns the log value // if it is to be found printf("log(0.0): %f\n", answer(0.0)); // the function does not throws any exception if (!fetestexcept(FE_ALL_EXCEPT)) { printf("no exceptions raised"); } return 0; }
Producción:
log(0.0): -inf no exceptions raised
Programa 2:
CPP
// C++ program to illustrate the // feupdateenv() function #include <bits/stdc++.h> #pragma STDC FENV_ACCESS on // Function to use the function double answer(double y) { // struct defined fenv_t trial; // use the function feholdexcept feholdexcept(&trial); // find log value y = log(y); // clears exception feclearexcept(FE_OVERFLOW | FE_DIVBYZERO); // call the function for success or not feupdateenv(&trial); return y; } int main() { // It is a combination of all of // the possible floating-point exception feclearexcept(FE_ALL_EXCEPT); // it returns the log value // if it is to be found printf("log(10.0): %f\n", answer(10.0)); // the function does not throws any exception if (!fetestexcept(FE_ALL_EXCEPT)) { printf("no exceptions raised"); } else printf("exceptions raised"); return 0; }
Producción:
log(10.0): 2.302585 exceptions raised
Publicación traducida automáticamente
Artículo escrito por AmanSrivastava1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA