From 754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sun, 7 Apr 2024 13:41:34 -0500 Subject: new repository --- devdocs/c/numeric%2Ffenv%2Ffeupdateenv.html | 74 +++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 devdocs/c/numeric%2Ffenv%2Ffeupdateenv.html (limited to 'devdocs/c/numeric%2Ffenv%2Ffeupdateenv.html') diff --git a/devdocs/c/numeric%2Ffenv%2Ffeupdateenv.html b/devdocs/c/numeric%2Ffenv%2Ffeupdateenv.html new file mode 100644 index 00000000..e05e65a3 --- /dev/null +++ b/devdocs/c/numeric%2Ffenv%2Ffeupdateenv.html @@ -0,0 +1,74 @@ +

feupdateenv

Defined in header <fenv.h>
int feupdateenv( const fenv_t* envp );
+
(since C99)

First, remembers the currently raised floating-point exceptions, then restores the floating-point environment from the object pointed to by envp (similar to fesetenv), then raises the floating-point exceptions that were saved.

+

This function may be used to end the non-stop mode established by an earlier call to feholdexcept.

+

Parameters

+ +
envp - pointer to the object of type fenv_t set by an earlier call to feholdexcept or fegetenv or equal to FE_DFL_ENV

Return value

​0​ on success, non-zero otherwise.

+

Example

#include <stdio.h>
+#include <fenv.h>
+#include <float.h>
+ 
+#pragma STDC FENV_ACCESS ON
+ 
+void show_fe_exceptions(void)
+{
+    printf("current 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");
+}
+ 
+double x2 (double x)   /* times two */
+{
+    fenv_t curr_excepts;
+ 
+    /* Save and clear current f-p environment. */
+    feholdexcept(&curr_excepts);
+ 
+    /* Raise inexact and overflow exceptions. */
+    printf("In x2():  x = %f\n", x=x*2.0);
+    show_fe_exceptions();
+    feclearexcept(FE_INEXACT);   /* hide inexact exception from caller */
+ 
+    /* Merge caller's exceptions (FE_INVALID)        */
+    /* with remaining x2's exceptions (FE_OVERFLOW). */
+    feupdateenv(&curr_excepts);
+    return x;
+}
+ 
+int main(void)
+{    
+    feclearexcept(FE_ALL_EXCEPT);
+    feraiseexcept(FE_INVALID);   /* some computation with invalid argument */
+    show_fe_exceptions();
+    printf("x2(DBL_MAX) = %f\n", x2(DBL_MAX));
+    show_fe_exceptions();
+ 
+    return 0;
+}

Output:

+
current exceptions raised:  FE_INVALID
+In x2():  x = inf
+current exceptions raised:  FE_INEXACT FE_OVERFLOW
+x2(DBL_MAX) = inf
+current exceptions raised:  FE_INVALID FE_OVERFLOW

References

See also

+ + + +
+
(C99)
saves the environment, clears all status flags and ignores all future errors
(function)
+
(C99)
saves or restores the current floating-point environment
(function)
+
(C99)
default floating-point environment
(macro constant)
C++ documentation for feupdateenv
+

+ © cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
+ https://en.cppreference.com/w/c/numeric/fenv/feupdateenv +

+
-- cgit v1.2.3