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) 最小有效位之最接近值之間的結果。
目前的捨入模式會影響下列作業:
- 字串轉換。
- 常數運算式之外的浮點算術運算子結果。
- 程式庫捨入函式,例如
rint
和nearbyint
。 - 從標準程式庫數學函式傳回值。
目前的四捨五入模式不會影響這些作業:
trunc
、ceil
、floor
和lround
程式庫函式。- 浮點至整數隱含轉型和轉換,其一律會以趨近於零的方式捨入。
- 常數運算式中浮點算術運算子的結果,其一律會捨入為最接近的值。
若要使用這些函式,您必須在呼叫之前使用 #pragma fenv_access(on)
指示詞,以關閉可能會妨礙存取的浮點最佳化作業。 如需詳細資訊,請參閱fenv_access
。
重要
在 Windows 10 版本 14393 之前, fenv.h
已定義 FE_UPWARD = 0x0100
和 FE_DOWNWARD = 0x0200
。 在 Windows 版本 14393 中,此標頭已更新,以解決某些 API 會解譯 FE_UPWARD
為 FE_DOWNWARD
的 Bug,反之亦然。 從 Windows 14393 版開始, FE_UPWARD = 0x0200
和 FE_DOWNWARD = 0x0100
會反轉其先前的值。
如果您針對舊的 Windows SDK 版本編譯應用程式(此問題取決於 SDK 版本,而不是 OS 版本或 VS 版本),您可能會遇到此問題。 將您的應用程式更新為以最新的 Windows SDK 為目標,讓和 FE_DOWNWARD
的定義FE_UPWARD
與 Windows 實作一致。 如果您無法將應用程式更新為以較新的 Windows SDK 為目標,您可以在程式代碼中將 和 0x0100
FE_DOWNWARD
0x0200
定義為 FE_UPWARD
和 。
需求
函式 | C 標頭 | C++ 標頭 |
---|---|---|
fegetround , fesetround |
<fenv.h> |
<cfenv> |
如需詳細資訊,請參閱相容性。
另請參閱
依字母順序排列的函式參考
nearbyint
、 、 nearbyintf
nearbyintl
rint
、 、 rintf
rintl
lrint
、、lrintf
lrintl
、llrint
、、llrintf
、llrintl