fegetround
, fesetround
Ruft den aktuellen Gleitkomma-Rundungsmodus ab bzw. legt ihn fest.
Syntax
int fegetround(void);
int fesetround(int round_mode);
Parameter
round_mode
Der als eines der Gleitkomma-Rundungsmakros festzulegende Rundungsmodus. Wenn der Wert nicht mit einem der Gleitkomma-Rundungsmakros identisch ist, wird der Rundungsmodus nicht geändert.
Rückgabewert
Bei Erfolg gibt fegetround
den Rundungsmodus als einen der Gleitkomma-Rundungsmakrowerte zurück. Ein negativer Wert wird zurückgegeben, wenn der aktuelle Rundungsmodus nicht bestimmt werden kann.
Bei Erfolg gibt fesetround
0 (null) zurück. Andernfalls wird ein Wert ungleich null zurückgegeben.
Hinweise
Gleitkommaoperationen können mehrere Rundungsmodi verwenden. Diese Modi steuern, in welche Richtung die Ergebnisse von Gleitkommavorgängen gerundet werden, wenn die Ergebnisse gespeichert werden. Hier sind die Namen und Verhaltensweisen der gleitkommaseitigen Rundungsmakros, die in <fenv.h> definiert sind:
Makro | Beschreibung |
---|---|
FE_DOWNWARD |
Runden in Richtung minus unendlich. |
FE_TONEAREST |
Runden in Richtung des nächsten Werts. |
FE_TOWARDZERO |
Runden in Richtung 0 (null). |
FE_UPWARD |
Runden in Richtung plus unendlich. |
Das Standardverhalten FE_TONEAREST
besteht darin, die Ergebnisse zwischen dargestellten Werten auf den nächsten Wert mit einem geraden (0) kleinsten Bit zu runden.
Der aktuelle Rundungsmodus wirkt sich auf diese Vorgänge aus:
- Zeichenfolgenkonvertierungen.
- Die Ergebnisse der arithmetischen Gleitkommaoperatoren außerhalb konstanter Ausdrücke.
- Die Rundungsfunktionen der Bibliothek, wie z. B.
rint
undnearbyint
. - Rückgabewerte aus mathematischen Funktionen der Standardbibliothek.
Der aktuelle Rundungsmodus wirkt sich nicht auf diese Vorgänge aus:
- Die Bibliotheksfunktionen
trunc
,ceil
,floor
undlround
. - Implizite Umwandlungen und Konvertierungen von Gleitkommazahl in ganze Zahl, bei denen immer in Richtung 0 (null) gerundet wird.
- Die Ergebnisse von arithmetischen Gleitkommaoperatoren in konstanten Ausdrücken, bei denen immer auf den nächsten Wert gerundet wird.
Um diese Funktionen zu verwenden, müssen Sie vor dem Aufruf Gleitkommaoptimierungen deaktivieren, die den Zugriff mithilfe der #pragma fenv_access(on)
-Direktive verhindern könnten. Weitere Informationen finden Sie unter fenv_access
.
Wichtig
Vor Windows 10, Version 14393, fenv.h
definiert FE_UPWARD = 0x0100
und FE_DOWNWARD = 0x0200
. In Windows Version 14393 wurde dieser Header aktualisiert, um einen Fehler zu beheben, bei dem einige APIs als FE_DOWNWARD
, und umgekehrt interpretiert FE_UPWARD
würden. Ab Windows, Version 14393, FE_UPWARD = 0x0200
und FE_DOWNWARD = 0x0100
umkehren Sie ihre vorherigen Werte.
Wenn Sie Ihre App mit einer alten Windows SDK-Version kompiliert haben (dieses Problem hängt von der SDK-Version, nicht von der Betriebssystemversion oder VS-Version ab), tritt möglicherweise dieses Problem auf. Aktualisieren Sie Ihre App so, dass sie auf das neueste Windows SDK ausgerichtet ist, damit die Definitionen und FE_DOWNWARD
Dies FE_UPWARD
mit der Windows-Implementierung konsistent ist. Wenn Sie Ihre App nicht so aktualisieren können, dass sie auf ein späteres Windows SDK ausgerichtet ist, können Sie sie wie 0x0100
FE_DOWNWARD
0x0200
im Code definieren.FE_UPWARD
Anforderungen
Funktion | C-Header | C++-Header |
---|---|---|
fegetround , fesetround |
<fenv.h> |
<cfenv> |
Weitere Informationen finden Sie unter Kompatibilität.
Siehe auch
Alphabetische Funktionsreferenz
nearbyint
, nearbyintf
nearbyintl
rint
, rintf
rintl
lrint
, , lrintf
lrintl
, llrint
, , llrintf
llrintl