#include <stdio.h>
int main()
{
float a = 1. / 0;
float b = 2. / 0;
printf("%f == %f ? %d\n", a, b, a == b);
return 0;
}
will print:
inf == inf ? 1
Moreover:
#include <stdio.h>
int main()
{
float a = 0. / 0;
float b = a;
printf("%f == %f ? %d\n", a, b, a == b);
return 0;
}
nan == nan ? 0
So this is certainly surprising without knowing quite a bit already about floats, because it means = is not only not transitive but even not reflexive.
Nobody is discussing about usual mathematical definitions: this is about the IEEE754 standard. In that context, x / 0 is defined (to positive infinity). I was pointing the error of the OP about the explanation about Nan != Nan.
Actually no. Just in case you were confused by cdavid's sample code: the concise explanation is that division by zero in IEEE floating point produces an infinity (there are two: positive and negative), not a NaN. Neither is necessarily an "error" in the sense of a runtime exception (the generation of which is programmable).