gpt4 book ai didi

c++ - float : Disable specific exception

转载 作者:太空宇宙 更新时间:2023-11-04 02:04:10 25 4
gpt4 key购买 nike

我设置了两个函数,一个用于启用浮点异常,一个用于禁用异常。
在下面的代码中,我一次性启用了两个异常(_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com