浮点数环境 (C++11 起)

從 cppreference.com
< cpp‎ | numeric


 
 
 
浮點數環境
函數
(C++11)(C++11)
(C++11)(C++11)
宏常量
(C++11)
 

浮點數環境是實現所支持的浮點數狀態標誌及控制模式的集合。它是線程局部的,每個線程從父線程繼承其浮點數環境的初始狀態。浮點數運算修改浮點數狀態標誌,以指示異常結果或輔助信息。浮點數控制模式的狀態對一些浮點數運算的產出有影響。

浮點數環境訪問和修改僅在 #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 文檔