Namespaces
Variants

Floating-point environment (since C++11)

From cppreference.net
Floating-point environment
Functions
(C++11) (C++11)
(C++11) (C++11)
Macro constants
(C++11)

Die Gleitkommaumgebung ist der Satz von Gleitkomma-Statusflags und Steuerungsmodi, die von der Implementierung unterstützt werden. Sie ist thread-lokal. Jeder Thread erbt den Anfangszustand seiner Gleitkommaumgebung vom übergeordneten Thread. Gleitkommaoperationen modifizieren die Gleitkomma-Statusflags, um abnormale Ergebnisse oder Zusatzinformationen anzuzeigen. Der Zustand der Gleitkomma-Steuerungsmodi beeinflusst die Ergebnisse einiger Gleitkommaoperationen.

Der Zugriff auf und die Änderung der Gleitkommaumgebung ist nur sinnvoll, wenn #pragma STDC FENV_ACCESS unterstützt wird und auf ON gesetzt ist. Andernfalls ist es der Implementierung freigestellt anzunehmen, dass die Gleitkomma-Steuerungsmodi immer die Standardeinstellungen sind und dass Gleitkomma-Statusflags niemals geprüft oder geändert werden. In der Praxis unterstützen wenige aktuelle Compiler, wie HP aCC, Oracle Studio oder IBM XL, das #pragma explizit, aber die meisten Compiler ermöglichen dennoch einen sinnvollen Zugriff auf die Gleitkommaumgebung.

Inhaltsverzeichnis

Typen

Definiert im Header <cfenv>
fenv_t
(C++11)
der Typ, der die gesamte Gleitkommaumgebung repräsentiert
(typedef)
fexcept_t
(C++11)
der Typ, der alle Gleitkomma-Statusflags gemeinsam repräsentiert
(typedef)

Funktionen

Löscht die angegebenen Gleitkomma-Statusflags
(Funktion)
Bestimmt, welche der angegebenen Gleitkomma-Statusflags gesetzt sind
(Funktion)
Löst die angegebenen Gleitkomma-Ausnahmen aus
(Funktion)
Kopiert den Zustand der angegebenen Gleitkomma-Statusflags von oder in die Gleitkomma-Umgebung
(Funktion)
(C++11) (C++11)
Ermittelt oder setzt die Rundungsrichtung
(Funktion)
Speichert oder stellt die aktuelle Gleitkomma-Umgebung wieder her
(Funktion)
Speichert die Umgebung, löscht alle Statusflags und ignoriert alle zukünftigen Fehler
(Funktion)
Stellt die Gleitkomma-Umgebung wieder her und löst die zuvor ausgelösten Ausnahmen erneut aus
(Funktion)

Makros

Gleitkomma-Ausnahmen
(Makrokonstante)
Gleitkomma-Rundungsrichtung
(Makrokonstante)
(C++11)
Standard-Gleitkomma-Umgebung
(Makrokonstante)

Hinweise

Die Gleitkomma-Ausnahmen stehen nicht in Beziehung zu den C++-Ausnahmen. Wenn eine Gleitkomma-Operation eine Gleitkomma-Ausnahme auslöst, ändert sich der Status der Gleitkomma-Umgebung, was mit std::fetestexcept getestet werden kann, aber die Ausführung eines C++-Programms wird auf den meisten Implementierungen ununterbrochen fortgesetzt.

Es gibt Compiler-Erweiterungen, die verwendet werden können, um automatisch C++-Ausnahmen zu generieren, wann immer eine Gleitkomma-Ausnahme ausgelöst wird:

  • GNU libc-Funktion feenableexcept() aktiviert das Abfangen von Gleitkomma-Ausnahmen, was das Signal SIGFPE erzeugt. Falls die Compiler-Option -fnon-call-exceptions verwendet wurde, kann der Handler für dieses Signal eine benutzerdefinierte C++-Ausnahme werfen.
  • MSVC-Funktion _control87() aktiviert das Abfangen von Gleitkomma-Ausnahmen, was eine Hardware-Ausnahme erzeugt, die mit _set_se_translator in C++-Ausnahmen umgewandelt werden kann.

Siehe auch

C-Dokumentation für Gleitkomma-Umgebung