Gleitkomma-Umgebung (seit C++11)
Die Gleitkomma-Umgebung ist die Menge der von der Implementierung unterstützten Gleitkomma-Statusflags und Steuerungsmodi. Sie ist threads-lokal. Jeder Thread erbt den Anfangszustand seiner Gleitkomma-Umgebung vom Eltern-Thread. Gleitkommaoperationen ändern die Gleitkomma-Statusflags, um abnormale Ergebnisse oder Hilfsinformationen anzuzeigen. Der Zustand der Gleitkomma-Steuerungsmodi beeinflusst die Ergebnisse einiger Gleitkommaoperationen.
Der Zugriff auf und die Änderung der Gleitkomma-Umgebung ist nur dann sinnvoll, wenn #pragma STDC FENV_ACCESS unterstützt wird und auf ON gesetzt ist. Andernfalls kann die Implementierung frei davon ausgehen, dass Gleitkomma-Steuerungsmodi immer die Standardmodi sind und dass Gleitkomma-Statusflags nie getestet oder geändert werden. In der Praxis unterstützen nur wenige aktuelle Compiler, wie HP aCC, Oracle Studio oder IBM XL, das #pragma explizit, aber die meisten Compiler erlauben dennoch einen sinnvollen Zugriff auf die Gleitkomma-Umgebung.
Inhalt |
[bearbeiten] Typen
| Definiert in Header
<cfenv> | |
| fenv_t (C++11) |
der Typ, der die gesamte Gleitkomma-Umgebung repräsentiert (typedef) |
| fexcept_t (C++11) |
der Typ, der alle Gleitkomma-Statusflags kollektiv repräsentiert (typedef) |
[bearbeiten] Funktionen
| (C++11) |
löscht die angegebenen Gleitkomma-Statusflags (function) |
| (C++11) |
ermittelt, welche der angegebenen Gleitkomma-Statusflags gesetzt sind (function) |
| (C++11) |
löst die angegebenen Gleitkomma-Ausnahmen aus (function) |
| (C++11)(C++11) |
kopiert den Zustand der angegebenen Gleitkomma-Statusflags aus oder in die Gleitkomma-Umgebung (function) |
| (C++11)(C++11) |
holt oder setzt die Rundungsrichtung (function) |
| (C++11) |
speichert oder stellt die aktuelle Gleitkomma-Umgebung wieder her (function) |
| (C++11) |
speichert die Umgebung, löscht alle Statusflags und ignoriert alle zukünftigen Fehler (function) |
| (C++11) |
stellt die Gleitkomma-Umgebung wieder her und löst die zuvor ausgelösten Ausnahmen aus (function) |
[bearbeiten] Makros
| Gleitkomma-Ausnahmen (macro constant) | |
| Gleitkomma-Rundungsrichtung (macro constant) | |
| (C++11) |
Standard-Gleitkomma-Umgebung (macro constant) |
[bearbeiten] Anmerkungen
Die Gleitkomma-Ausnahmen stehen nicht im Zusammenhang mit C++-Ausnahmen. Wenn eine Gleitkommaoperation eine Gleitkomma-Ausnahme auslöst, ändert sich der Zustand der Gleitkomma-Umgebung, was mit std::fetestexcept getestet werden kann, aber die Ausführung eines C++-Programms wird bei den meisten Implementierungen ungehindert fortgesetzt.
Es gibt Compiler-Erweiterungen, die verwendet werden können, um automatisch C++-Ausnahmen zu erzeugen, sobald eine Gleitkomma-Ausnahme ausgelöst wird
- Die GNU libc-Funktion
feenableexcept()aktiviert das Abfangen von Gleitkomma-Ausnahmen, was das SignalSIGFPEgeneriert. Wenn die Compiler-Option-fnon-call-exceptionsverwendet wurde, kann der Handler für dieses Signal eine benutzerdefinierte C++-Ausnahme auslösen. - Die MSVC-Funktion
_control87()aktiviert das Abfangen von Gleitkomma-Ausnahmen, was eine Hardware-Ausnahme generiert, die mit_set_se_translatorin C++-Ausnahmen umgewandelt werden kann.
[bearbeiten] Siehe auch
| C-Dokumentation für Gleitkomma-Umgebung
|