Visual Studio总是打破“浮点不精确的结果”

时间:2018-03-04 22:50:01

标签: c++ visual-studio debugging exception

所以VS 2015和2017都会发生这种情况。每次运行我的应用程序时,它都会在Floating-point inexact result中的msvcrt.dll异常中断,如果我点击Continue,则异常一次又一次地出现。我从Exception Settings取消选中它,但无论我尝试什么,我似乎都无法阻止它停止。

这就是我得到的:

Floating-point inexact result

启用或禁用Just My Code似乎没有任何效果,此问题也出现在Visual Studio 2015中。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

This website状态:

  

默认情况下,运行时库会屏蔽所有浮点异常。

在我看来,您的代码通过使用属于一组名为_clearfp(...)_controlfp(...)_controlfp_s(...)的一个或多个函数来更改此默认值。

该问题的解决方案是将中断异常掩码_MCW_EM设置为默认值。有关掩码常量和值的更多信息,请访问this website

您可以使用以下代码将_MCW_EM设置为默认值:

    //Read
    unsigned int fp_control = 0;
    _controlfp_s(&fp_control, 0, 0);
    //Make changes
    unsigned int new_fp_control = fp_control | _EM_INVALID | _EM_DENORMAL | _EM_ZERODIVIDE | _EM_OVERFLOW | _EM_UNDERFLOW | _EM_INEXACT;
    //Update
    _controlfp_s(&fp_control, new_fp_control, _MCW_EM);

此代码应该可以解决问题。