fegetenv, fesetenv
|
Definiert im Header
<fenv.h>
|
||
|
int
fegetenv
(
fenv_t
*
envp
)
;
|
(1) | (seit C99) |
|
int
fesetenv
(
const
fenv_t
*
envp
)
;
|
(2) | (seit C99) |
1) Versucht, den Status der Gleitkommaumgebung in dem Objekt zu speichern, auf das
envp
zeigt.
2) Versucht, die Gleitkommaumgebung aus dem Objekt einzurichten, auf das
envp
zeigt. Der Wert dieses Objekts muss zuvor durch einen Aufruf von
feholdexcept
oder
fegetenv
erhalten worden sein oder eine Gleitkomma-Makrokonstante sein. Falls irgendwelche Gleitkomma-Statusflags in
envp
gesetzt sind, werden sie in der Umgebung gesetzt (und können dann mit
fetestexcept
getestet werden), aber die entsprechenden Gleitkomma-Ausnahmen werden nicht ausgelöst (die Ausführung wird ununterbrochen fortgesetzt).
Inhaltsverzeichnis |
Parameter
| envp | - | Zeiger auf das Objekt vom Typ fenv_t , das den Status der Gleitkommaumgebung enthält |
Rückgabewert
0 bei Erfolg, andernfalls ungleich Null.
Beispiel
#include <stdio.h> #include <math.h> #include <fenv.h> #pragma STDC FENV_ACCESS ON void show_fe_exceptions(void) { printf("aktuelle ausgelöste Ausnahmen: "); 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 show_fe_rounding_method(void) { printf("aktuelle Rundungsmethode: "); switch (fegetround()) { case FE_TONEAREST: printf ("FE_TONEAREST"); break; case FE_DOWNWARD: printf ("FE_DOWNWARD"); break; case FE_UPWARD: printf ("FE_UPWARD"); break; case FE_TOWARDZERO: printf ("FE_TOWARDZERO"); break; default: printf ("unbekannt"); }; printf("\n"); } void show_fe_environment(void) { show_fe_exceptions(); show_fe_rounding_method(); } int main(void) { fenv_t curr_env; int rtn; /* Standardumgebung anzeigen. */ show_fe_environment(); printf("\n"); /* Führe einige Berechnungen unter Standardumgebung durch. */ printf("+11.5 -> %+4.1f\n", rint(+11.5)); /* genau zwischen zwei ganzen Zahlen */ printf("+12.5 -> %+4.1f\n", rint(+12.5)); /* genau zwischen zwei ganzen Zahlen */ show_fe_environment(); printf("\n"); /* Aktuelle Umgebung speichern. */ rtn = fegetenv(&curr_env); /* Führe einige Berechnungen mit neuer Rundungsmethode durch. */ feclearexcept(FE_ALL_EXCEPT); fesetround(FE_DOWNWARD); printf("1.0/0.0 = %f\n", 1.0/0.0); printf("+11.5 -> %+4.1f\n", rint(+11.5)); printf("+12.5 -> %+4.1f\n", rint(+12.5)); show_fe_environment(); printf("\n"); /* Vorherige Umgebung wiederherstellen. */ rtn = fesetenv(&curr_env); show_fe_environment(); return 0; }
Ausgabe:
aktuelle ausgelöste Ausnahmen: keine aktuelle Rundungsmethode: FE_TONEAREST +11.5 -> +12.0 +12.5 -> +12.0 aktuelle ausgelöste Ausnahmen: FE_INEXACT aktuelle Rundungsmethode: FE_TONEAREST 1.0/0.0 = inf +11.5 -> +11.0 +12.5 -> +12.0 aktuelle ausgelöste Ausnahmen: FE_DIVBYZERO FE_INEXACT aktuelle Rundungsmethode: FE_DOWNWARD aktuelle ausgelöste Ausnahmen: FE_INEXACT aktuelle Rundungsmethode: FE_TONEAREST
Referenzen
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.6.4.1 Die fegetenv-Funktion (S. 213)
-
- 7.6.4.3 Die fesetenv-Funktion (S. 214)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.6.4.1 Die fegetenv-Funktion (S. 194)
-
- 7.6.4.3 Die fesetenv-Funktion (S. 195)
Siehe auch
|
(C99)
|
Speichert die Umgebung, löscht alle Statusflags und ignoriert alle zukünftigen Fehler
(Funktion) |
|
(C99)
|
Stellt die Gleitkommaumgebung wieder her und löst die zuvor ausgelösten Ausnahmen aus
(Funktion) |
|
(C99)
|
Standard-Gleitkommaumgebung
(Makrokonstante) |
|
C++-Dokumentation
für
fegetenv
,
fesetenv
|
|