C <fenv.h> - feupdateenv() Function
The C <fenv.h> feupdateenv() function attempts to establish the state of the floating-point environment from the object pointed to by envp. Then, it then attempts to raise the floating-point exceptions that were saved.
This function can be used to end the non-stop mode established by an earlier call to feholdexcept.
Syntax
int feupdateenv(const fenv_t* envp);
Parameters
envp |
Specify pointer to the object of type fenv_t set by an earlier call to fegetenv() or feholdexcept() or equal to FE_DFL_ENV macro constant. |
Return Value
Returns 0 on success. A non-zero value otherwise.
Exception
This function never throws exceptions.
Example:
The example below shows the usage of feupdateenv() function.
#include <stdio.h> #include <fenv.h> #include <math.h> #pragma STDC FENV_ACCESS ON void FE_Exceptions_Message(void) { printf("Exceptions raised:"); if(fetestexcept(FE_DIVBYZERO)) printf(" FE_DIVBYZERO"); if(fetestexcept(FE_INEXACT)) printf(" FE_INEXACT"); if(fetestexcept(FE_INVALID)) printf(" FE_INVALID"); if(fetestexcept(FE_OVERFLOW)) printf(" FE_OVERFLOW"); if(fetestexcept(FE_UNDERFLOW)) printf(" FE_UNDERFLOW"); if(fetestexcept(FE_ALL_EXCEPT) == 0) printf(" None"); printf("\n"); } void Rounding_Direction_Message(void) { printf("Current rounding method: "); switch(fegetround()) { case FE_DOWNWARD: printf("DOWNWARD"); break; case FE_TONEAREST: printf("TO-NEAREST"); break; case FE_TOWARDZERO: printf("TOWARD-ZERO"); break; case FE_UPWARD: printf("UPWARD"); break; default: printf("unknown"); } printf("\n"); } void FE_Environment_Message(void) { FE_Exceptions_Message(); Rounding_Direction_Message(); printf("\n"); } int main (){ //creating fenv_t object fenv_t curr_env; feraiseexcept(FE_INEXACT); //displaying the current environment FE_Environment_Message(); //saving and clearing the current environment feholdexcept(&curr_env); //changing the current environment //and displaying it sqrt(-1); fesetround(FE_DOWNWARD); FE_Environment_Message(); //updating current environment with the //previous environment and displaying it feupdateenv(&curr_env); FE_Environment_Message(); return 0; }
The output of the above code will be:
Exceptions raised: FE_INEXACT Current rounding method: TO-NEAREST Exceptions raised: FE_INVALID Current rounding method: DOWNWARD Exceptions raised: FE_INEXACT FE_INVALID Current rounding method: TO-NEAREST
❮ C <fenv.h> Library