编译器提供了一个函数集,可以调用其中的函数来返回特殊的 IEEE 极值。这些值,如 infinity 或 minimum normal,可以直接在应用程序中使用。
示例:基于硬件支持的最小数值的收敛测试如下所示:
IF ( delta .LE. r_min_normal() ) RETURN |
下表列出了可用的值:
表 6–3 返回 IEEE 值的函数
IEEE 值 |
双精度 |
单精度 |
---|---|---|
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() |
两个 NaN 值(quiet 和 signaling)是无序的,不能用于比较,如 IF(X.ne.r_quiet_nan())THEN...。要确定某些值是否是 NaN,请使用函数 ir_isnan(r) 或 id_isnan(d)。
以下手册页列出了这些函数的 Fortran 名称:
libm_double(3f)
libm_single(3f)
ieee_functions(3m)
另请参见:
ieee_values(3m)
floatingpoint.h 头文件和 floatingpoint(3f)