命名空间
变体
操作

浮点环境 (C++11 起)

来自 cppreference.cn
< cpp‎ | numeric
 
 
 
浮点环境
函数
(C++11)
(C++11)
(C++11)
(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)
(C++11)
(C++11)
宏常量
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)
(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++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 文档 关于 浮点环境