The compilers provide a set of functions that can be called to return a special IEEE extreme value. These values, such as infinity or minimum normal, can be used directly in an application program.
Example: A convergence test based on the smallest number supported by the hardware would look like:
IF ( delta .LE. r_min_normal() ) RETURN
The values available are listed in the following table:
Table 6-3 Functions Returning IEEE Values
IEEE Value |
Double Precision |
Single Precision |
---|---|---|
infinity |
d_infinity() |
r_infinity() |
quiet NaN |
d_quiet_nan() |
r_quiet_nan() |
signaling NaN |
d_signaling_nan() |
r_signaling_nan() |
min normal |
d_min_normal() |
r_min_normal() |
min subnormal |
d_min_subnormal() |
r_min_subnormal() |
max subnormal |
d_max_subnormal() |
r_max_subnormal() |
max normal |
d_max_normal() |
r_max_normal() |
The two NaN values (quiet and signaling) are unordered and should not be used in comparisons such as IF(X.ne.r_quiet_nan())THEN... To determine whether some value is a NaN, use the function ir_isnan(r) or id_isnan(d).
The Fortran names for these functions are listed in these man pages:
libm_double(3f)
libm_single(3f)
ieee_functions(3m)
Also see:
ieee_values(3m)
The f77_floatingpoint.h header file