相关疑难解决方法(0)

如何在C++中跟踪NaN

我将使用C++进行一些数学计算.输入浮点数是有效数字,但在计算之后,结果值为NaN.我想跟踪NaN值出现的点(可能使用GDB),而不是isNan()在代码中插入很多.但我发现即使是这样的代码也不会在出现NaN值时触发异常.

double dirty = 0.0;
double nanvalue = 0.0/dirty;
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议一种跟踪NaN或将NaN变为异常的方法吗?

c++ debugging floating-point

30
推荐指数
2
解决办法
9389
查看次数

Debug C++代码:首先捕获NaN外观

是否有一种简单的方法来检查调试器中的C++代码,以便首次出现NaN值?

c++ debugging nan

6
推荐指数
2
解决办法
4908
查看次数

在没有代码更改的情况下生成NaN浮点数时停止调试器

我读到这个这个.如果通过包含fenv.h生成nan并且启用所有浮点异常,则可以抛出SIGFPE,但是FE_INEXACT通过feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT);

因此,代码改变了形式

int main () {
   double dirty = 0.0;
   double nanvalue = 0.0/dirty;
   return 0;
 }
Run Code Online (Sandbox Code Playgroud)

 #include <fenv.h>
 int main () {
     feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT);  // Enable all floating point exceptions but FE_INEXACT
     double dirty = 0.0;
     double nanvalue = 0.0/dirty;
     return 0;
 }
Run Code Online (Sandbox Code Playgroud)

这工作正常,但您必须更改代码.我有问题,在一个巨大的c和c ++代码库中,某个地方生成了一个nan,我不知道在哪里.将上述更改应用于文件的hunderts并跟踪错误不是一种选择.

有没有办法在没有代码更改的情况下启用所有浮点异常?有没有我不知道的编译选项?

我们使用intel icc 15.0.3版编译器.

c c++ nan sigfpe

6
推荐指数
1
解决办法
216
查看次数

标签 统计

c++ ×3

debugging ×2

nan ×2

c ×1

floating-point ×1

sigfpe ×1