Problems when the data compared is a NaN

I am reading some values from a file and comparing them. Now there is a NaN value in the file which also passes through the if condition.
My program is something like this:

float j, k;

j = sqrt(-1); // to generate NaN
k = j;

if ( j < k || j > k )
    printf("\n values are different");
    printf("\n values are identical");

I am compiling this program using pgcc on Interix. I get the output “Values are different”. But if I use gcc instead of pgcc on interix I get the output values are identical. Also if I check the sign of j, k it is negative when compiled with pgcc and positive when compiled with gcc. I found this when I compared it if it is less than or greater than 0.

if (j < 0)
   printf("\n Negative");
   printf("\n Positive");

Please explain this behaviour.


Try using the isnan() to determine if the values are nans.

% more isnan_test.c
#include <stdio.h>
#include <math.h>
void main()
float j,k;
j=sqrt(-1); //generate nan
if(isnan(j)) printf("\n value j is nan\n");
if(isnan(k)) printf("\n value k is nan\n");