类型
fenv_t
- 浮点环境类型
- 可以表示浮点环境 整个状态的类型,包括其状态标志(如活动浮点异常)和控制模式(如舍入方向模式)
fexcept_t
- 浮点异常类型
- 可以共同表示所有浮点状态标志的状态的类型,包括活动的浮点异常以及实现与它们的状态相关联的任何附加信息
函数
int feclearexcept (int excepts);
- 尝试清除由excepts 指定的浮点异常
int feraiseexcept (int excepts);
- 尝试引发由excepts指定的浮点异常。 如果指定了多个异常,则引发它们的顺序未指定。
int fegetexceptflag (fexcept_t* flagp, int excepts);
- 尝试将由excepts 指定的浮点异常的表示形式存储到fexcept_t指向的对象。
int fesetexceptflag (const fexcept_t* flagp, int excepts);
- 尝试使用存储在 flagp 指向的对象中的状态设置由excepts指示的异常。如果成功,该函数会更改浮点环境的当前状态,设置请求的异常标志,但不会实际引发异常。
int fegetround (void);
- 返回一个值,该值指示舍入方向模式,如当前浮点环境中指定的那样
int fesetround (int rdir);
- 将rdir 设置为浮点环境的当前舍入方向模式
int fegetenv (fenv_t* envp);
- 尝试将浮点环境的当前状态存储在envp指向的对象中
int fesetenv (const fenv_t* envp);
- 尝试建立由envp指向的对象表示的浮点环境的状态。浮点环境是一组影响浮点计算 的状态标志和控制模式(包括浮点异常和舍入方向模式)
- 如果成功,该函数会更改浮点环境 的当前状态,而不会实际引发此类状态中指定的异常。
int feholdexcept (fenv_t* envp);
- 将浮点环境 的当前状态保存在envp指向的对象中
- 它会重置当前状态,并在支持的情况下将环境置于不间断模式
- 不间断模式可防止浮点异常
int feupdateenv (const fenv_t* envp);
- 尝试建立由envp指向的对象表示的浮点环境的状态。然后它尝试引发调用之前在浮点环境中设置的异常。
int fetestexcept (int excepts);
- 返回当前设置的异常,在excepts指定的那些中。
宏常量
FE_DIVBYZERO
- 此宏扩展为一个类型的值,该值
int
标识在极点错误上引发的浮点异常。
- 极点错误发生在运算具有渐近无穷大的结果时,例如除以零或. 它被定义为一个精确的 2 次幂的值,允许将多个浮点异常组合(使用按位 OR 运算符: )为一个值
-
FE_INEXACT
- 此宏扩展为一个类型的值,该值
int
标识在不精确结果上引发的浮点异常。
-
FE_INVALID
- 此宏扩展为一个类型的值,该值
int
标识在无效参数上引发的浮点异常。引发无效参数异常以表示传递给函数的参数超出其域
-
FE_OVERFLOW
- 此宏扩展为
int
标识溢出范围错误引发的浮点异常的类型值。当操作的结果由于其幅度太大(正号或负号)而无法表示为其返回类型的值时,就会发生溢出范围错误
-
FE_UNDERFLOW
- 此宏扩展为一个类型的值,
int
用于标识下溢范围错误引发的浮点异常。下溢范围错误发生在操作的结果不能表示为其返回类型的值时,因为它的大小太小(带有正号或负号)。 溢出的操作返回一个未指定的值,其大小不大于最小的标准化正数。
-
FE_ALL_EXCEPT
- 这个宏扩展为一个类型的值,它
int
结合了定义在(按位或)
-
FE_DOWNWARD
- 此宏扩展为一个类型的值,
int
用于标识函数的向下舍入方向模式
-
FE_TONEAREST
- 此宏扩展为一个类型的值,
int
用于标识函数的最近舍入方向模式
-
FE_TOWARDZERO
- 此宏扩展为一个类型的值,该值
int
标识函数的趋向零舍入方向模式
-
FE_UPWARD
- 此宏扩展为一个类型的值,
int
用于标识函数的向上舍入方向模式
FE_DFL_ENV
- 此宏扩展为指向fenv_t可用于选择函数的默认环境节日环境和feupdateenv. 默认环境是程序启动时浮点环境 的状态。
FENV_ACCESS
#pragma STDC FENV_ACCESS 开启
:设置为on,程序会通知编译器它可能会访问浮点环境以测试其状态标志(异常)或在默认情况下以外的控制模式下运行
#pragma STDC FENV_ACCESS 关闭
:设置为off,编译器可能会执行某些可以破坏这些测试和模式更改的优化,因此在上述情况下访问*浮点环境会导致*未定义的行为
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
Everything will be better.