NaN signifies not a number, and since there are many, different, reasons a calculation could give that result, they generally do not compare as equal against themselves.   If you want to do nan-testing, fortran compilers that support the f2003 standard (which is recent versions of most compilers) have ieee_is_nan in the ieee_arithmetic module:
program testnan
    use ieee_arithmetic
    real (kind=kind(0.d0)) :: x,y,z
    x = sqrt(-1.d0)
    y = sqrt(-1.d0)
    z = 1.d0
    if ( ieee_is_nan(x) ) then
       write(*,*) 'X is NaN'
    endif
    if ( ieee_is_nan(y) ) then
       write(*,*) 'Y is NaN'
    endif
    if ( ieee_is_nan(x) .and. ieee_is_nan(y) ) then
       write(*,*) 'X and Y are NaN'
    endif
    if ( ieee_is_nan(z) ) then
       write(*,*) 'Z is NaN, too'
    else
       write(*,*) 'Z is a number'
    endif
end program testnan
Compiling and running this program gives
ifort -o nan nan.f90
 X is NaN
 Y is NaN
 X and Y are NaN
 Z is a number
Unfortunately, gfortran still doesn't implement ieee_arithmetic as time of writing, so with gfortran you have to use the non-standard isnan.