C ++ fesetenv () - C ++ Standardbibliothek

Die Funktion fesetenv () in C ++ versucht, die Gleitkommaumgebung aus dem angegebenen Zeigerobjekt vom Typ fenv_t festzulegen.

Die Funktion fesetenv () ist in der Header-Datei definiert.

fesetenv () Prototyp

 int fesetenv (fenv_t * envp);

Die Funktion fesetenv () versucht, die Gleitkommaumgebung aus dem Objekt festzulegen, auf das envp zeigt. Der Wert von envp muss zuvor durch einen Aufruf von feholdexcept oder fegetenv erhalten werden oder eine Gleitkomma-Makrokonstante sein.

fesetenv () Parameter

  • envp: Zeiger auf ein Objekt vom Typ fenv_t, in dem der Status der Gleitkommaumgebung gespeichert ist.

fesetenv () Rückgabewert

  • Bei Erfolg gibt die Funktion fesetenv () 0 zurück.
  • Bei einem Fehler wird ungleich Null zurückgegeben.

Beispiel: Wie funktioniert die Funktion fesetenv ()?

 #include #include #include #pragma STDC FENV_ACCESS ON using namespace std; void print_exceptions() ( cout << "Raised exceptions: "; if(fetestexcept(FE_ALL_EXCEPT)) ( if(fetestexcept(FE_DIVBYZERO)) cout << "FE_DIVBYZERO "; if(fetestexcept(FE_INEXACT)) cout << "FE_INEXACT "; if(fetestexcept(FE_INVALID)) cout << "FE_INVALID "; if(fetestexcept(FE_OVERFLOW)) cout << "FE_OVERFLOW "; if(fetestexcept(FE_UNDERFLOW)) cout << "FE_UNDERFLOW "; ) else cout << "None"; cout << endl; ) void print_current_rounding_direction() ( cout << "Current rounding method: "; switch (fegetround()) ( case FE_TONEAREST: cout << "FE_TONEAREST"; break; case FE_DOWNWARD: cout << "FE_DOWNWARD"; break; case FE_UPWARD: cout << "FE_UPWARD"; break; case FE_TOWARDZERO: cout << "FE_TOWARDZERO"; break; default: cout << "unknown"; ); cout << endl; ) void print_environment() ( print_exceptions(); print_current_rounding_direction(); ) int main(void) ( cout << "Initial environment " << endl; print_environment(); fenv_t envp; /* Save current environment */ fegetenv(&envp); feraiseexcept(FE_INVALID|FE_DIVBYZERO); fesetround(FE_DOWNWARD); cout << "After changing environment " << endl; print_environment(); /* Restores previous environment */ fesetenv(&envp); cout << "Restoring initial environment " << endl; print_environment(); return 0; )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Anfangsumgebung Ausgelöste Ausnahmen: Keine Aktuelle Rundungsmethode: FE_TONEAREST Nach dem Ändern der Umgebung Ausgelöste Ausnahmen: FE_DIVBYZERO FE_INVALID Aktuelle Rundungsmethode: FE_DOWNWARD Wiederherstellen der Anfangsumgebung Ausgelöste Ausnahmen: Keine Aktuelle Rundungsmethode: FE_TONEAREST

Interessante Beiträge...