浮点数环境 (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 文檔
|