Pedantic nitpick: "!=" is a comparison but yields true for NaNs.
Me again. I felt the urge for a pretty picture, so here it
is, as seen from an IEEE854-ish machine:
compare -NaN -Inf -1e+10 -1 -1e-10 0 1e-10 1e+10 Inf NaN
------- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
-NaN != != != != != != != != != !=
-Inf != == < < < < < < < !=
-1e+10 != > == < < < < < < !=
-1 != > > == < < < < < !=
-1e-10 != > > > == < < < < !=
0 != > > > > == < < < !=
1e-10 != > > > > > == < < !=
1e+10 != > > > > > > == < !=
Inf != > > > > > > > == !=
NaN != != != != != != != != != !=
-----------------quickie code-------------------
#include <stdio.h>
int main(void)
{
double inf, nan;
double sample[] = {0, 0, -1E+10, -1, -1E-10, 0, +1E-10, +1E+10, 0, 0};
size_t i, j, len;
sscanf("Inf", "%lf", &inf);
sscanf("NaN", "%lf", &nan);
sample[0] = -nan;
sample[1] = -inf;
sample[8] = inf;
sample[9] = nan;
len = sizeof(sample) / sizeof(sample[0]);
printf("compare ");
for (j = 0; j < len; j++)
printf(" %-6g", sample[j]);
printf("\n");
printf("------- ");
for (j = 0; j < len; j++)
printf(" -----");
printf("\n");
for (i = 0; i < len; i++)
{
printf("%-6g ", sample
);
for (j = 0; j < len; j++)
{
if (sample == sample[j]) printf(" == ");
else if (sample > sample[j]) printf(" > ");
else if (sample < sample[j]) printf(" < ");
else if (sample >= sample[j]) printf(" >= ");
else if (sample <= sample[j]) printf(" <= ");
else if (sample != sample[j]) printf(" != ");
}
printf("\n");
}
return 0;
}