6

我读了这个这个。精髓是,如果通过包含 fenv.h 并启用所有浮点异常但FE_INEXACT通过feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT);

因此,代码更改形式

int main () {
   double dirty = 0.0;
   double nanvalue = 0.0/dirty;
   return 0;
 }

 #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;
 }

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

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

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

4

1 回答 1

4

无论您的代码跨越多少个文件,您只需要在函数的第一行添加feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT) 一次。main()

它将为您的整个程序启用异常,直到您通过调用另一个函数(例如fedisableexcept().

于 2017-09-12T07:39:12.190 回答