命名空間
變體
動作

浮點環境 (自 C++11 起)

出自 cppreference.com
 
 
 
浮點環境
函式
(C++11)(C++11)
(C++11)(C++11)
巨集常數
(C++11)
 

浮點環境是實作所支援的浮點狀態旗標與控制模式的集合。它是執行緒區域的(thread-local)。每個執行緒皆會從父執行緒繼承其浮點環境的初始狀態。浮點運算會修改浮點狀態旗標,以指示異常結果或輔助資訊。浮點控制模式的狀態會影響某些浮點運算的結果。

浮點環境的存取與修改僅在支援 #pragma STDC FENV_ACCESS 且將其設定為 ON 時才有意義。否則,實作可以自由假定浮點控制模式始終為預設值,且浮點狀態旗標永遠不會被測試或修改。實際上,極少數目前的編譯器(例如 HP aCC、Oracle Studio 或 IBM XL)會明確支援此 #pragma,但大多數編譯器無論如何都允許對浮點環境進行有意義的存取。

目錄

[編輯] 類型

定義於標頭 <cfenv>
fenv_t
(C++11)
表示整個浮點環境的類型
(typedef) [編輯]
fexcept_t
(C++11)
集體表示所有浮點狀態旗標的類型
(typedef) [編輯]

[編輯] 函式

清除指定的浮點狀態旗標
(函式) [編輯]
判斷指定的浮點狀態旗標中哪一個被設定
(函式) [編輯]
引發指定的浮點異常
(函式) [編輯]
從浮點環境複製或將狀態複製到浮點環境的指定浮點狀態旗標
(函式) [編輯]
(C++11)(C++11)
取得或設定捨入方向
(函式) [編輯]
儲存或還原當前的浮點環境
(函式) [編輯]
儲存環境、清除所有狀態旗標並忽略所有未來錯誤
(函式) [編輯]
還原浮點環境並引發先前引發的異常
(函式) [編輯]

[編輯] 巨集

浮點異常
(巨集常數) [編輯]
浮點捨入方向
(巨集常數) [編輯]
預設浮點環境
(巨集常數) [編輯]

[編輯] 附註

浮點異常與 C++ 異常無關。當浮點運算引發浮點異常時,浮點環境的狀態會改變,這可以透過 std::fetestexcept 進行測試,但在大多數實作中,C++ 程式的執行會持續進行而不中斷。

有一些編譯器擴充功能可用於在每次引發浮點異常時自動產生 C++ 異常。

  • GNU libc 函式 feenableexcept() 可啟用浮點異常的捕捉,這會產生 SIGFPE 訊號。如果使用了編譯器選項 -fnon-call-exceptions,則該訊號的處理常式可能會拋出使用者自定義的 C++ 異常。
  • MSVC 函式 _control87() 可啟用浮點異常的捕捉,這會產生硬體異常,並可透過 _set_se_translator 轉換為 C++ 異常。

[編輯] 參閱

C 文件 關於 浮點環境
English Deutsch 日本語 中文(简体) 中文(繁體)