c – 如何使用try … catch来捕捉浮点错误?
我在visual studio express中使用c生成用于遗传算法类型的程序的随机表达式树.
因为它们是随机的,所以树经常产生:除以零,溢出,下溢以及返回“inf”等字符串.我可以写字符串的处理程序,但文献让我对其他人感到困惑.如果我理解正确,我必须先设置一些标志? 对某些文献的建议和/或指针将不胜感激. 解决方法
你确定要抓住他们,而不是忽略它们吗?假设你只想忽略它们:
见: 对于_MCW_EM掩码,清除掩码设置异常,这允许硬件异常;设置掩码隐藏异常. 所以你要做这样的事情: #include <float.h> #pragma fenv_access (on) void main() { unsigned int fp_control_word; unsigned int new_fp_control_word; _controlfp_s(&fp_control_word,0); // Make the new fp env same as the old one,// except for the changes we're going to make new_fp_control_word = fp_control_word | _EM_INVALID | _EM_DENORMAL | _EM_ZERODIVIDE | _EM_OVERFLOW | _EM_UNDERFLOW | _EM_INEXACT; //Update the control word with our changes _controlfp_s(&fp_control_word,new_fp_control_word,_MCW_EM) } 这里的一些混乱可能是使用“异常”一词.在C中,通常是指内置异常处理系统的语言.浮点异常是一个不同的野兽.标准FPU需要支持的例外都在IEEE-754中进行了定义.这些发生在浮点单元内,这可以根据浮点单元的控制标志如何设置而做不同的事情.通常发生两件事之一: 您可以在这里找到更多关于IEE-754:http://www.openwatcom.org/ftp/devel/docs/ieee-754.pdf 一些额外的浮点引用: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |