Namensräume
Varianten
Aktionen

Gleitkomma-Umgebung (seit C++11)

Von cppreference.com
< cpp‎ | numeric
 
 
 
Gleitkomma-Umgebung
Funktionen
(C++11)(C++11)
(C++11)(C++11)
Makrokonstanten
(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) [bearbeiten]
fexcept_t
(C++11)
der Typ, der alle Gleitkomma-Statusflags kollektiv repräsentiert
(typedef) [bearbeiten]

[bearbeiten] Funktionen

löscht die angegebenen Gleitkomma-Statusflags
(function) [bearbeiten]
ermittelt, welche der angegebenen Gleitkomma-Statusflags gesetzt sind
(function) [bearbeiten]
löst die angegebenen Gleitkomma-Ausnahmen aus
(function) [bearbeiten]
kopiert den Zustand der angegebenen Gleitkomma-Statusflags aus oder in die Gleitkomma-Umgebung
(function) [bearbeiten]
(C++11)(C++11)
holt oder setzt die Rundungsrichtung
(function) [bearbeiten]
speichert oder stellt die aktuelle Gleitkomma-Umgebung wieder her
(function) [bearbeiten]
speichert die Umgebung, löscht alle Statusflags und ignoriert alle zukünftigen Fehler
(function) [bearbeiten]
stellt die Gleitkomma-Umgebung wieder her und löst die zuvor ausgelösten Ausnahmen aus
(function) [bearbeiten]

[bearbeiten] Makros

Gleitkomma-Ausnahmen
(macro constant) [bearbeiten]
Gleitkomma-Rundungsrichtung
(macro constant) [bearbeiten]
Standard-Gleitkomma-Umgebung
(macro constant) [bearbeiten]

[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 Signal SIGFPE generiert. Wenn die Compiler-Option -fnon-call-exceptions verwendet 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_translator in C++-Ausnahmen umgewandelt werden kann.

[bearbeiten] Siehe auch

C-Dokumentation für Gleitkomma-Umgebung