To find the cause of floating point variables beeing set to NaN in my C++ program I enabled floating point exceptions like this:
#include <fenv.h>
feenableexcept(FE_INVALID | FE_OVERFLOW);
I know it works because when I write:
int val = 0.0/0.0;
in my program a floating point exception is risen. But NaNs are "spreading" through the floating point calculations of my program and I have no idea which variable is set to NaN first.
What causes for a variable beeing set to NaN exist, that would not cause a floating point exception?
If any input has a quiet NaN value, it will cause the result of nearly any floating-point operation that consumes it to be NaN without raising the invalid exception.
The most likely explanation is that some data is being read from the wrong address, and that the read data (which may not even be floating-point data) happens to match a quiet NaN encoding. This can happen pretty easily, because the relatively common pattern 0xffff...
encodes a quiet NaN.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With