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 und nearbyint.
  • Rückgabewerte aus mathematischen Funktionen der Standardbibliothek.

Der aktuelle Rundungsmodus wirkt sich nicht auf diese Vorgänge aus:

  • Die Bibliotheksfunktionen trunc, ceil, floorund lround .
  • 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 = 0x0100umkehren 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 0x0100FE_DOWNWARD0x0200 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