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