浮點環境 (自 C++11 起)
出自 cppreference.com
浮點環境是實作所支援的浮點狀態旗標與控制模式的集合。它是執行緒區域的(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++11) |
引發指定的浮點異常 (函式) |
| (C++11)(C++11) |
從浮點環境複製或將狀態複製到浮點環境的指定浮點狀態旗標 (函式) |
| (C++11)(C++11) |
取得或設定捨入方向 (函式) |
| (C++11) |
儲存或還原當前的浮點環境 (函式) |
| (C++11) |
儲存環境、清除所有狀態旗標並忽略所有未來錯誤 (函式) |
| (C++11) |
還原浮點環境並引發先前引發的異常 (函式) |
[編輯] 巨集
| 浮點異常 (巨集常數) | |
| 浮點捨入方向 (巨集常數) | |
| (C++11) |
預設浮點環境 (巨集常數) |
[編輯] 附註
浮點異常與 C++ 異常無關。當浮點運算引發浮點異常時,浮點環境的狀態會改變,這可以透過 std::fetestexcept 進行測試,但在大多數實作中,C++ 程式的執行會持續進行而不中斷。
有一些編譯器擴充功能可用於在每次引發浮點異常時自動產生 C++ 異常。
- GNU libc 函式
feenableexcept()可啟用浮點異常的捕捉,這會產生SIGFPE訊號。如果使用了編譯器選項-fnon-call-exceptions,則該訊號的處理常式可能會拋出使用者自定義的 C++ 異常。 - MSVC 函式
_control87()可啟用浮點異常的捕捉,這會產生硬體異常,並可透過_set_se_translator轉換為 C++ 異常。
[編輯] 參閱
| C 文件 關於 浮點環境
|