# Idiom #270 Test for quiet or signaling NaN

Given a floating point number r1 classify it as follows:
If it is a signaling NaN, print "This is a signaling NaN."
If it is a quiet NaN, print "This s a quiet NaN."
If it is not a NaN, print "This is a number."

``import math``
``````if math.isnan(r1):
print('This is a quiet NaN.')
else:
print('This is a number.')
``````
``````if (r1.isNaN) {
print("This is a quiet NaN.");
} else {
print("This is a number.");
}``````
``use, intrinsic:: ieee_arithmetic``
``````  character (len=:), allocatable :: msg
if (ieee_support_nan(r1)) then
if (ieee_class(r1) == ieee_quiet_nan) then
msg = "This s a quiet NaN."
else if (ieee_class(r1) == ieee_signaling_nan) then
msg = "This is a signaling NaN."
else
msg = "This is a number."
end if
else
msg = "NaNs are not supported."
end if
write (*,'(A)') msg``````
``uses sysutils;``
``````  if r1.IsNan then
begin
if (TDoubleRec(r1).Data and \$4000000000000000) = \$4000000000000000 then
writeln('This is a quiet NaN')
else
writeln('This is a signalling NaN');
end
else
writeln('This is a number: ',r1);
``````
``use POSIX qw(:nan_payload nan isnan issignaling setpayload);``
``````my @r = (nan, nan, 1.234);

foreach my \$r1 ( @r ) {
if ( isnan \$r1 ) {
printf "This is a %s NaN\n",
issignaling(\$r1) ? 'signaling' : 'quiet';
} else {
printf "This is not a NaN: %s\n", \$r1;
}
}

# Output:
# This is a quiet NaN
# This is a signaling NaN
# This is not a NaN: 1.234
``````

tkoenig