Visual Studio C ++ 2008/2010 - 在float NaN上打破

时间:2010-12-15 20:31:44

标签: c++ visual-studio visual-studio-2010 floating-point floating-point-exceptions

有没有办法设置Visual Studio(刚刚从2008升级到2010年)来破解,就好像断言失败,只要任何浮点数变成NaN,QNAN,INF等?

到目前为止,我刚刚使用了断言(x == x)技巧,但我宁愿隐含一些东西,所以我不必在任何地方添加断言。

很惊讶我无法通过谷歌找到答案。关于'浮点异常'的一些东西,但我不确定它们是否是同一个东西,我已经尝试在Visual Studio中启用它们,但程序不会破坏,直到由于NaN后来发生灾难性事件执行中。

4 个答案:

答案 0 :(得分:31)

1)转到项目选项并启用 / fp:strict (C / C ++ - >代码生成 - >浮动品脱模型)。

2)使用 _controlfp 设置浮点控制字(参见下面的代码)。

#include <float.h>
unsigned int fp_control_state = _controlfp(_EM_INEXACT, _MCW_EM);

#include <math.h>

int main () {

    sqrtf(-1.0);    // floating point exception

    double x = 0.0;
    double y = 1.0/x;   // floating point exception

    return 0;
}

答案 1 :(得分:4)

答案 2 :(得分:1)

至少在x86上,当您生成NaN等时,会设置其中一个FPU状态寄存器位。有一种方法可以设置,以便在下一次 FP操作发生时抛出H / W异常,但这并不是您希望的那么快。我不记得参考了。

答案 3 :(得分:0)

我不确定这是否可能以您希望的方式实现,但您可以创建一个宏,将标记行中的代码包装到断言中或为此设置断点。

希望这有帮助