feupdateenv
Von cppreference.com
| Definiert in der Headerdatei <fenv.h> |
||
| int feupdateenv( const fenv_t* envp ); |
(seit C99) | |
Zuerst werden die aktuell ausgelösten Gleitkommaausnahmen gespeichert, dann wird die Gleitkommaumgebung aus dem Objekt, auf das envp zeigt, wiederhergestellt (ähnlich wie bei fesetenv), und dann werden die gespeicherten Gleitkommaausnahmen ausgelöst.
Diese Funktion kann verwendet werden, um den durch einen früheren Aufruf von feholdexcept etablierten Non-Stop-Modus zu beenden.
Inhalt |
[bearbeiten] Parameter
| envp | - | Zeiger auf das Objekt vom Typ fenv_t, das durch einen früheren Aufruf von feholdexcept oder fegetenv gesetzt wurde, oder das gleich FE_DFL_ENV ist |
[bearbeiten] Rückgabewert
0 bei Erfolg, andernfalls ungleich Null.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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; }
Ausgabe
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
[bearbeiten] Referenzen
- C11-Standard (ISO/IEC 9899:2011)
- 7.6.4.4 Die Funktion feupdateenv (S. 214-215)
- C99-Standard (ISO/IEC 9899:1999)
- 7.6.4.4 Die Funktion feupdateenv (S. 195-196)
[bearbeiten] Siehe auch
| (C99) |
speichert die Umgebung, löscht alle Statusflags und ignoriert alle zukünftigen Fehler (function) |
| (C99) |
speichert oder stellt die aktuelle Gleitkomma-Umgebung wieder her (function) |
| (C99) |
Standard-Gleitkomma-Umgebung (macro constant) |
| C++ Dokumentation für feupdateenv
| |