【发布时间】:2018-02-20 13:36:14
【问题描述】:
我读过this 和this。精髓是,如果通过包含 fenv.h 并启用所有浮点异常但 FE_INEXACT feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT); 产生 nan,则可以抛出 SIGFPE
因此,代码改变了形式
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 版编译器。
【问题讨论】:
-
您只需在
main()的第一行应用代码更改一次 对吗? -
我会试试的。我认为我需要在任何地方都包含它。
-
feenableexcept()改变了运行时系统的行为,它只需要调用一次就可以全局生效。