How to trace a NaN in C++

后端 未结 4 436
生来不讨喜
生来不讨喜 2020-12-05 00:17

I am going to do some math calculations using C++ . The input floating point number is a valid number, but after the calculations, the resulting value is NaN. I would like

4条回答
  •  猫巷女王i
    2020-12-05 01:17

    Since you mention using gdb, here's a solution that works with gcc -- you want the functions defined in fenv.h :

    #define _GNU_SOURCE
    #include 
    #include 
    
    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);
    }
    

    Running the above program produces the output "Floating point exception". Without the call to feenableexcept, the "Succeeded!" message is printed.

    If you were to write a signal handler for SIGFPE, that might be a good place to set a breakpoint and get the traceback you want. (Disclaimer: haven't tried it!)

提交回复
热议问题