c++11 float_point environmen


本文只是对http://www.cplusplus.com/reference/cfenv/的浮点环境的简单翻译。

具体可以参考http://blog.csdn.net/zhoudaxia/article/details/4710047

#include <fenv.h>/ #inlcude <cfenv>
    浮点数环境,对于支持#pragma的编译器,只有在代码前加#pragma STDC_FENV_ACCESS on后才有效。不支持#pragma的编译器,大多直接支持float-point environment的访问。
类型:
    fenv_t          是一个结构体typedef struct fenv_t{unsigned long _fe_ctl, _fe_stat;} fenv_t;
                    表示整个floating-point environment的status flag和control modes。 
                    通过fegetenv或者feholdexcept修改值
    fexcept_t       typedef unsigned long fexcept_t;异常标志对应fenv_t._fe_stat。


异常宏:
    FE_ALL_EXCEPT       以下所有异常的"|"组合
    FE_DIVBYZERO        除0异常或者log(0.0)
    FE_INEXACT          返回值结果不精确异常(1.0/3.0、sqrt(2.0))
    FE_INVALID          函数传参无效异常
    FE_UNDERFLOW        对于返回类型来讲返回值太小,以致不能表示结果。
    FE_OVERFLOW         对于返回类型来讲返回值太大,以致不能表示结果。
舍入宏:
    FE_DOWNWARD         向下舍入,结果小于原数值的最大值
    FE_TONEAREST        最近舍入
    FE_TOWARDZERO       向0舍入
    FE_UPWARD           向上舍入,结果大于原数值的最小值
float-point环境宏:
    FE_DFL_ENV          指向fenv_t的指针,表示默认值。


异常函数:
    int feclearexcept (int excepts);
        // 清空excepts指定的异常,excepts取值为表示异常的宏。成功返回0,失败返回非0值。


    int feraiseexcept (int excepts)
        // 抛出excepts异常。成功返回0,失败返回非0值。


    int fegetexceptflag (fexcept_t* flagp, int excepts);
        // 用flagp获取excepts异常的fenv_t._fe_stat。成功返回0,失败返回非0值。


    int fesetexceptflag (const fexcept_t* flagp, int excepts);
        // 用flagp修改excepts异常的fenv_t._fe_stat
舍入函数:
    int fegetround (void);
    int fesetround (int rdir); // 成功返回0,失败返回非0值。
        // 参考舍入宏
float-point环境函数
    int fegetenv (fenv_t* envp);
    int fesetenv (const fenv_t* envp)
        // envp获取/创建当前float-point environment的_fe_stat和_fe_ctl


    int feholdexcept (fenv_t* envp);
        /* 将当前浮点数环境保存到ENVP所指对象中,清除异常标志,然后安装一个不停止的浮点数环境(即 
    忽略所有浮点数异常) */ 


    int feupdateenv (const fenv_t* envp);
    /* 将当前浮点数环境保存到一个临时存储中,然后安装ENVP所指的环境,并根据保存的异常环境 
    产生异常 */




int fetestexcept (int excepts);
    // 返回当前异常集合中包含excepts异常的异常cfenv
    浮点数环境,对于支持#pragma的编译器,只有在代码前加#pragma STDC_FENV_ACCESS on后才有效。不支持#pragma的编译器,大多直接支持float-point environment的访问。
类型:
    fenv_t          是一个结构体typedef struct fenv_t{unsigned long _fe_ctl, _fe_stat;} fenv_t;
                    表示整个floating-point environment的status flag和control modes。 
                    通过fegetenv或者feholdexcept修改值
    fexcept_t       typedef unsigned long fexcept_t;异常标志对应fenv_t._fe_stat。


异常宏:
    FE_ALL_EXCEPT       以下所有异常的"|"组合
    FE_DIVBYZERO        除0异常或者log(0.0)
    FE_INEXACT          返回值结果不精确异常(1.0/3.0、sqrt(2.0))
    FE_INVALID          函数传参无效异常
    FE_UNDERFLOW        对于返回类型来讲返回值太小,以致不能表示结果。
    FE_OVERFLOW         对于返回类型来讲返回值太大,以致不能表示结果。
舍入宏:
    FE_DOWNWARD         向下舍入,结果小于原数值的最大值
    FE_TONEAREST        最近舍入
    FE_TOWARDZERO       向0舍入
    FE_UPWARD           向上舍入,结果大于原数值的最小值
float-point环境宏:
    FE_DFL_ENV          指向fenv_t的指针,表示默认值。


异常函数:
    int feclearexcept (int excepts);
        // 清空excepts指定的异常,excepts取值为表示异常的宏。成功返回0,失败返回非0值。


    int feraiseexcept (int excepts)
        // 抛出excepts异常。成功返回0,失败返回非0值。


    int fegetexceptflag (fexcept_t* flagp, int excepts);
        // 用flagp获取excepts异常的fenv_t._fe_stat。成功返回0,失败返回非0值。


    int fesetexceptflag (const fexcept_t* flagp, int excepts);
        // 用flagp修改excepts异常的fenv_t._fe_stat
舍入函数:
    int fegetround (void);
    int fesetround (int rdir); // 成功返回0,失败返回非0值。
        // 参考舍入宏
float-point环境函数
    int fegetenv (fenv_t* envp);
    int fesetenv (const fenv_t* envp)
        // envp获取/创建当前float-point environment的_fe_stat和_fe_ctl


    int feholdexcept (fenv_t* envp);
        /* 将当前浮点数环境保存到ENVP所指对象中,清除异常标志,然后安装一个不停止的浮点数环境(即 
    忽略所有浮点数异常) */ 


    int feupdateenv (const fenv_t* envp);
    /* 将当前浮点数环境保存到一个临时存储中,然后安装ENVP所指的环境,并根据保存的异常环境 
    产生异常 */




int fetestexcept (int excepts);
    // 返回当前异常集合中包含excepts异常的异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值