c++ - float : Disable specific exception

标签 c++ c floating-point floating-point-exceptions

我设置了两个函数,一个用于启用浮点异常,一个用于禁用异常。
在下面的代码中,我一次性启用了两个异常(_EM_ZERODIVIDE 和 _EM_OVERFLOW),之后我只需要禁用 _EM_ZERODIVIDE 并让 _EM_OVERFLOW 启用。
传递给我的函数 ResetFloatExeption (....) 的参数是什么。
详情见代码。

    #include <stdio.h>
    #include <float.h>
    #include <math.h>
    #pragma fenv_access (on)


    // SetFloatExeption
    void SetFloatExeption (unsigned int new_control)
    {
         _clearfp(); 
        _controlfp_s(0,new_control, _MCW_EM);
    }

    // ResetFloatExeption
    void ResetFloatExeption (unsigned int new_control) 
    {
         _clearfp(); 
        _controlfp_s(0,new_control, _MCW_EM);
    }

    //***************  main  ****//
    void main( void )
    {
        unsigned int old_control;
        double a = 1.1;
        double b = 0.0;
        float d;

        _controlfp_s(&old_control,0,0);         

        // Enable exception _EM_ZERODIVIDE and _EM_OVERFLOW

        SetFloatExeption (old_control & ~(_EM_ZERODIVIDE | _EM_OVERFLOW) );
         // Here, How to call ResetFloatExeption to disable juste _EM_ZERODIVIDE and let  _EM_OVERFLOW  enabled
        ResetFloatExeption(old_control & ???);      
        fprintf(stdout,"a/b= %.10e\n",a/b);     

        int exponent = 50;
        d = pow(10.0, exponent);                

        printf("d = %f\n",d);                   
    }

最佳答案

old_control & ~_EM_ZERODIVIDE | _EM_OVERFLOW

你的两个函数做同样的事情。也许你应该删除一个?

关于c++ - float : Disable specific exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22717369/

相关文章:

c++ - 如何在 qt 中创建图像比较器?

python - np.exp() 的数值问题

c - 字符串后的垃圾

floating-point - 如何从二进制文件中读取单精度 float 并转换为 Erlang float ?

ios - 为什么 GLSL 的算术函数在 iPad 上与在模拟器上产生如此不同的结果?

c++ - 好的风格——返回枚举还是整数?

c++ - QMetaObject::invokeMethod 无法调用 QML/JS 函数

c++ - 未显式引用对象的全局对象构造函数在最终二进制文件中被丢弃 - LD

c - 为什么我在 C 语言中遇到段错误?

c++ - 函数指针总是初始化为 NULL 吗?