Floating-point environment (since 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
|
(C++11)
|
Löscht die angegebenen Gleitkomma-Statusflags
(Funktion) |
|
(C++11)
|
Bestimmt, welche der angegebenen Gleitkomma-Statusflags gesetzt sind
(Funktion) |
|
(C++11)
|
Löst die angegebenen Gleitkomma-Ausnahmen aus
(Funktion) |
|
(C++11)
(C++11)
|
Kopiert den Zustand der angegebenen Gleitkomma-Statusflags von oder in die Gleitkomma-Umgebung
(Funktion) |
|
(C++11)
(C++11)
|
Ermittelt oder setzt die Rundungsrichtung
(Funktion) |
|
(C++11)
|
Speichert oder stellt die aktuelle Gleitkomma-Umgebung wieder her
(Funktion) |
|
(C++11)
|
Speichert die Umgebung, löscht alle Statusflags und ignoriert alle zukünftigen Fehler
(Funktion) |
|
(C++11)
|
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 SignalSIGFPEerzeugt. Falls die Compiler-Option-fnon-call-exceptionsverwendet 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_translatorin C++-Ausnahmen umgewandelt werden kann.
Siehe auch
|
C-Dokumentation
für
Gleitkomma-Umgebung
|