Why does NaN - NaN == 0.0 with the Intel C++ Compiler? -


it well-known nans propagate in arithmetic, couldn't find demonstrations, wrote small test:

#include <limits> #include <cstdio>  int main(int argc, char* argv[]) {     float qnan = std::numeric_limits<float>::quiet_nan();      float neg = -qnan;      float sub1 = 6.0f - qnan;     float sub2 = qnan - 6.0f;     float sub3 = qnan - qnan;      float add1 = 6.0f + qnan;     float add2 = qnan + qnan;      float div1 = 6.0f / qnan;     float div2 = qnan / 6.0f;     float div3 = qnan / qnan;      float mul1 = 6.0f * qnan;     float mul2 = qnan * qnan;      printf(         "neg: %f\nsub: %f %f %f\nadd: %f %f\ndiv: %f %f %f\nmul: %f %f\n",         neg, sub1,sub2,sub3, add1,add2, div1,div2,div3, mul1,mul2     );      return 0; } 

the example (running live here) produces expect (the negative little weird, kind of makes sense):

neg: -nan sub: nan nan nan add: nan nan div: nan nan nan mul: nan nan 

msvc 2015 produces similar. however, intel c++ 15 produces:

neg: -nan(ind) sub: nan nan 0.000000 add: nan nan div: nan nan nan mul: nan nan 

specifically, qnan - qnan == 0.0.

this... can't right, right? relevant standards (iso c, iso c++, ieee 754) this, , why there difference in behavior between compilers?

the default floating point handling in intel c++ compiler /fp:fast, handles nan's unsafely (which results in nan == nan being true example). try specifying /fp:strict or /fp:precise , see if helps.


Comments

Popular posts from this blog

java - UnknownEntityTypeException: Unable to locate persister (Hibernate 5.0) -

python - ValueError: empty vocabulary; perhaps the documents only contain stop words -

ubuntu - collect2: fatal error: ld terminated with signal 9 [Killed] -