Tests for NaN.
Logical indicating whether or not A contains NaN. The output value tests .true. only if there is at least one NaN in the scalar or array. (Output)
A — The argument can be a scalar or array of rank-1, rank-2 or rank-3. The values can be any of the four intrinsic floating-point types. (Input)
isNaN( A)
This is a generic logical function used to test scalars or
arrays for occurrence of an IEEE 754 Standard format of floating point (ANSI/IEEE 1985) NaN,
or not-a-number. Either quiet or signaling NaNs are detected
without an exception occurring in the test itself. The individual array entries
are each examined, with bit manipulation, until the first NaN is located. For
non-IEEE formats, the bit pattern tested for single precision is
transfer(not(0),1).
For double precision numbers x,
the bit pattern tested is equivalent to assigning the integer array
i(1:2) =
not(0),
then testing this array with the bit pattern of the integer array transfer(x,i).
This function is likely to be required whenever there is the
possibility that a subroutine blocked the output with NaNs in the presence of an
error condition.
use isnan_int
implicit none
! This is the equivalent of Example 1 for NaN.
integer, parameter :: n=3
real(kind(1e0)) A(n,n); real(kind(1d0)) B(n,n)
real(kind(1e0)), external :: s_NaN
real(kind(1d0)), external :: d_NaN
! Assign NaNs to both A and B:
A = s_Nan(1e0); B = d_Nan(1d0)
! Check that NaNs are noted in both A and B:
if (isNan(A) .and. isNan(B)) then
write (*,*) 'Example 1 for NaN is correct.'
end if
end
Visual Numerics, Inc. PHONE: 713.784.3131 FAX:713.781.9260 |