I have some floats stored in EEPROM - however when the code is run for the first time these may contain NaN.
I have this code to do a bounds check for sensible ranges:
EEPROM.get(EE_ofs_hi,P_offset_hi);
if((P_offset_hi<-1)or(P_offset_hi>1))
{
P_offset_hi=0;
}
but it doesn’t seem to detect if P_offset_hi is NaN.
Anyone know how to detect a NaN?
bko
July 3, 2017, 12:34am
2
Hi @twospoons
Have you tried adding #include <math.h>
and using the isnan(x)
function?
3 Likes
Ah, is that where its hiding? I saw isnan() in the C docs . I’ll try that thanks.
Well that didn’t work. isnan() isn’t recognised by the compiler.
Well, I can’t confirm that, for me this test code compiles just fine
1 Like
I found the problem. I have #include “softap_http.h” in my code as well, and that causes this error:
test.ino:6:16: error: 'isnan' was not declared in this scope
if (isnan(x)){
Take it out and it works fine. How do I fix this?
You could follow the suggestion given in the error note
/usr/local/gcc-arm-embedded/arm-none-eabi/include/c++/5.3.1/cmath:641:5: note: 'std::isnan'
isnan(_Tp __x)
and prefix the namespace std::
if (std::isnan(x)) {
1 Like
Thank you. I would never have found that. Where on earth was was that hiding?
Did you hit the SHOW RAW button?
No, but I just looked at it now - and I wouldn’t have seen the fix. So thanks again.