浮點環境 (C++11 起)
來自 cppreference.com
浮點環境是由實現支援的浮點狀態標誌和控制模式的集合。它是執行緒區域性的。每個執行緒都從父執行緒繼承其浮點環境的初始狀態。浮點操作會修改浮點狀態標誌以指示異常結果或輔助資訊。浮點控制模式的狀態會影響某些浮點操作的結果。
僅當 #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 文件 關於 浮點環境
|