use*_*900 30 c++ debugging floating-point
我将使用C++进行一些数学计算.输入浮点数是有效数字,但在计算之后,结果值为NaN.我想跟踪NaN值出现的点(可能使用GDB),而不是isNan()在代码中插入很多.但我发现即使是这样的代码也不会在出现NaN值时触发异常.
double dirty = 0.0;
double nanvalue = 0.0/dirty;
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议一种跟踪NaN或将NaN变为异常的方法吗?
Jim*_*wis 37
既然你提到使用gdb,这里有一个与gcc一起使用的解决方案 - 你想要在下面定义的函数fenv.h:
#define _GNU_SOURCE
#include <fenv.h>
#include <stdio.h>
int main(int argc, char **argv)
{
double dirty = 0.0;
feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT); // Enable all floating point exceptions but FE_INEXACT
double nanval=0.0/dirty;
printf("Succeeded! dirty=%lf, nanval=%lf\n",dirty,nanval);
}
Run Code Online (Sandbox Code Playgroud)
运行上述程序会产生输出"浮点异常".没有电话feenableexcept,"成功!" 邮件已打印.
如果您要为其编写信号处理程序SIGFPE,那么这可能是设置断点并获得所需回溯的好地方.(免责声明:没试过!)
在Visual Studio中,您可以使用_controlfp函数来设置浮点计算的行为(请参阅http://msdn.microsoft.com/en-us/library/e9b52ceh(VS.80).aspx).也许您的平台有类似的变体.
| 归档时间: |
|
| 查看次数: |
9389 次 |
| 最近记录: |