Share via


fegetround, fesetround

取得或設定目前的浮點捨入模式。

語法

int fegetround(void);
int fesetround(int round_mode);

參數

round_mode
要以其中一個浮點捨入巨集形式設定的捨入模式。 如果值不等於其中一個浮點四捨五入宏,則舍入模式不會變更。

傳回值

成功時, fegetround 會以其中一個浮點捨入巨集值的形式傳回捨入模式。 如果無法判斷目前的捨入模式,它就會傳回負值。

如果成功, fesetround 會傳回 0。 否則,會傳回非零值。

備註

浮點運算可以使用數種捨入模式的其中之一。 這些模式可控制儲存結果時,浮點運算結果向哪個方向四捨五入。 以下是 fenv.h > 中 < 定義的浮點四捨五入宏的名稱和行為:

Macro 描述
FE_DOWNWARD 捨入為無限大的負數。
FE_TONEAREST 捨入為最接近的數字。
FE_TOWARDZERO 以趨近於零的方式捨入。
FE_UPWARD 捨入為無限大的正數。

的預設行為 FE_TONEAREST 是將可表示值中間舍入到具有偶數 (0) 最小有效位之最接近值之間的結果。

目前的捨入模式會影響下列作業:

  • 字串轉換。
  • 常數運算式之外的浮點算術運算子結果。
  • 程式庫捨入函式,例如 rintnearbyint
  • 從標準程式庫數學函式傳回值。

目前的四捨五入模式不會影響這些作業:

  • truncceilfloorlround 程式庫函式。
  • 浮點至整數隱含轉型和轉換,其一律會以趨近於零的方式捨入。
  • 常數運算式中浮點算術運算子的結果,其一律會捨入為最接近的值。

若要使用這些函式,您必須在呼叫之前使用 #pragma fenv_access(on) 指示詞,以關閉可能會妨礙存取的浮點最佳化作業。 如需詳細資訊,請參閱fenv_access

重要

在 Windows 10 版本 14393 之前, fenv.h 已定義 FE_UPWARD = 0x0100FE_DOWNWARD = 0x0200 。 在 Windows 版本 14393 中,此標頭已更新,以解決某些 API 會解譯 FE_UPWARDFE_DOWNWARD 的 Bug,反之亦然。 從 Windows 14393 版開始, FE_UPWARD = 0x0200FE_DOWNWARD = 0x0100 會反轉其先前的值。 如果您針對舊的 Windows SDK 版本編譯應用程式(此問題取決於 SDK 版本,而不是 OS 版本或 VS 版本),您可能會遇到此問題。 將您的應用程式更新為以最新的 Windows SDK 為目標,讓 和 FE_DOWNWARD 的定義 FE_UPWARD 與 Windows 實作一致。 如果您無法將應用程式更新為以較新的 Windows SDK 為目標,您可以在程式碼中將 和 0x0100FE_DOWNWARD0x0200 定義為 FE_UPWARD 和 。

需求

函式 C 標頭 C++ 標頭
fegetround, fesetround <fenv.h> <cfenv>

如需詳細資訊,請參閱相容性

另請參閱

字母函數參考
nearbyint, nearbyintf, nearbyintl
rint, rintf, rintl
lrint, lrintf, lrintl, llrint, llrintf, llrintl