Sun Studio 12:Fortran 库参考

1.3 Fortran 数学函数

下列函数和子例程属于 Fortran 数学库。它们适用于使用 f95 编译的所有程序。这些例程属于非内例程,它们的参数采用特定数据类型并且返回值也是相同的数据类型。要使用非内例程,必须在引用它们的例程中进行声明。

其中许多例程都是“包装器”,即 C 语言库中例程的 Fortran 接口,它们本身并不是 Fortran 标准例程,其中包括 IEEE 推荐的支持函数以及专用的随机数生成器。有关这些库的更多信息,请参见《数值计算指南》以及 libm_single(3F)、libm_double(3F) 和 libm_quadruple(3F) 手册页。

1.3.1 单精度函数

这些子程序是单精度数学函数和子例程。

通常,下文介绍的函数可以访问单精度数学函数,它们没有对应的 Fortran 标准通用内函数,其数据类型按常用数据类型处理规则确定。

不必使用 REAL 语句对这些函数进行显式类型处理,只要保留缺省的类型处理即可。(以 "r" 开头的名称表示 REAL,以 "i" 开头的名称表示 INTEGER。)

有关这些例程的详细信息,参见 C 数学库手册页 (3M)。例如,有关 r_acos(x) 的信息,请参见 acos(3M) 手册页。

表 1–2 单精度数学函数

函数名 

返回类型 

说明 

r_acos( x )

r_acosd( x )

r_acosh( x )

r_acosp( x )

r_acospi( x )

REAL

REAL

REAL

REAL

REAL

反余弦

--

反双曲余弦

--

--

r_atan( x )

r_atand( x )

r_atanh( x )

r_atanp( x )

r_atanpi( x )

REAL

REAL

REAL

REAL

REAL

反正切

--

反双曲正切

--

--

r_asin( x )

r_asind( x )

r_asinh( x )

r_asinp( x )

r_asinpi( x )

REAL

REAL

REAL

REAL

REAL

反正弦

--

反双曲正弦

--

--

r_atan2(( y, x )

r_atan2d( y, x )

r_atan2pi( y, x )

REAL

REAL

REAL

反正切

--

--

r_cbrt( x )

r_ceil( x )

r_copysign( x, y )

REAL

REAL

REAL

立方根

计算大于或等于 x 的最小整数

--

r_cos( x )

r_cosd( x )

r_cosh( x )

r_cosp( x )

r_cospi( x )

REAL

REAL

REAL

REAL

REAL

余弦

--

双曲余弦

--

--

r_erf( x )

r_erfc( x )

REAL

REAL

误差函数

--

r_expm1( x )

r_floor( x )

r_hypot( x, y )

r_infinity( )

REAL

REAL

REAL

REAL

(e**x)-1

计算不大于 x 的下一个整数

计算直角三角形的斜边长度

--

r_j0( x )

r_j1( x )

r_jn(n, x )

REAL

REAL

REAL

贝塞尔--

--

ir_finite( x )

ir_fp_class( x )

ir_ilogb( x )

ir_irint( x )

ir_isinf( x )

ir_isnan( x )

ir_isnormal( x )

ir_issubnormal( x )

ir_iszero( x )

ir_signbit( x )

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

--

--

--

--

--

--

--

--

--

--

r_addran()

r_addrans( x, p, l, u )

r_lcran()

r_lcrans( x, p, l, u )

r_shufrans(x, p, l, u)

REAL

子例程 REAL

子例程

子例程

随机数生成器

r_lgamma( x )

r_logb( x )

r_log1p( x )

r_log2( x )

REAL

REAL

REAL

REAL

gamma(x) 的对数

--

--

--

r_max_normal()

r_max_subnormal()

r_min_normal()

r_min_subnormal()

r_nextafter( x, y )

r_quiet_nan( n )

r_remainder( x, y )

r_rint( x )

r_scalb( x, y )

r_scalbn( x, n )

r_signaling_nan( n )

r_significand( x )

REAL

REAL

REAL

REAL

REAL

REAL

REAL

REAL

REAL

REAL

REAL

REAL

 

r_sin( x )

r_sind( x )

r_sinh( x )

r_sinp( x )

r_sinpi( x )

REAL

REAL

REAL

REAL

REAL

正弦

--

双曲正弦

--

--

r_sincos( x, s, c )

r_sincosd( x, s, c )

r_sincosp( x, s, c )

r_sincospi( x, s, c )

子例程

子例程

子例程

子例程

正弦和余弦

--

--

--

r_tan( x )

r_tand( x )

r_tanh( x )

r_tanp( x )

r_tanpi( x )

REAL

REAL

REAL

REAL

REAL

正切

--

双曲正切

--

--

r_y0( x )

r_y1( x )

r_yn( n, x )

REAL

REAL

REAL

贝塞尔

--

--

另请参见:intro(3M) 和《数值计算指南》。

1.3.2 双精度函数

以下子程序为双精度数学函数和子例程。

通常,这些函数没有对应的 Fortran 标准通用内函数,其数据类型按常用数据类型处理规则确定。

这些 DOUBLE PRECISION 函数应该用于 DOUBLE PRECISION 语句中。

有关详细信息,请参阅 C 库手册页: acos(3M) 手册页中介绍了 d_acos(x)

表 1–3 双精度数学函数

函数名 

返回类型 

说明 

d_acos( x )

d_acosd( x )

d_acosh( x )

d_acosp( x )

d_acospi( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

反余弦

--

反双曲余弦

--

--

d_atan( x )

d_atand( x )

d_atanh( x )

d_atanp( x )

d_atanpi( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

反正切

--

反双曲正切

--

--

d_asin( x )

d_asind( x )

d_asinh( x )

d_asinp( x )

d_asinpi( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

反正弦

--

反双曲正弦

--

--

d_atan2(( y, x )

d_atan2d( y, x )

d_atan2pi( y, x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

反正切

--

--

d_cbrt( x )

d_ceil( x )

d_copysign( x, x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

立方根

计算大于或等于 x 的最小整数

--

d_cos( x )

d_cosd( x )

d_cosh( x )

d_cosp( x )

d_cospi( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

余弦

--

双曲余弦

--

--

d_erf( x )

d_erfc( x )

DOUBLE PRECISION

DOUBLE PRECISION

误差函数

--

d_expm1( x )

d_floor( x )

d_hypot( x, y )

d_infinity( )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

(e**x)-1

计算不大于 x 的下一个整数

计算直角三角形的斜边长度

--

d_j0( x )

d_j1( x )

d_jn(n, x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

贝塞尔

--

--

id_finite( x )

id_fp_class( x )

id_ilogb( x )

id_irint( x )

id_isinf( x )

id_isnan( x )

id_isnormal( x )

id_issubnormal( x )

id_iszero( x )

id_signbit( x )

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

 

d_addran()

d_addrans(x, p, l, u)

d_lcran()

d_lcrans(x, p, l, u )

d_shufrans(x, p, l,u)

DOUBLE PRECISION

子例程

DOUBLE PRECISION

子例程

子例程

随机数生成器

d_lgamma( x )

d_logb( x )

d_log1p( x )

d_log2( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

gamma(x) 的对数

--

--

--

d_max_normal()

d_max_subnormal()

d_min_normal()

d_min_subnormal()

d_nextafter( x, y )

d_quiet_nan( n )

d_remainder( x, y )

d_rint( x )

d_scalb( x, y )

d_scalbn( x, n )

d_signaling_nan( n )

d_significand( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

 

d_sin( x )

d_sind( x )

d_sinh( x )

d_sinp( x )

d_sinpi( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

正弦

--

双曲正弦

--

--

d_sincos( x, s, c )

d_sincosd( x, s, c )

d_sincosp( x, s, c )

d_sincospi( x, s, c )

子例程

子例程

子例程

子例程

正弦和余弦

--

--

d_tan( x )

d_tand( x )

d_tanh( x )

d_tanp( x )

d_tanpi( x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

正切

--

双曲正切

--

--

d_y0( x )

d_y1( x )

d_yn( n, x )

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

贝塞尔

--

--

另请参见:intro(3M) 和《数值计算指南》。

1.3.3 四倍精度函数

以下子程序为四倍精度 (REAL*16) 数学函数和子例程。

通常,这些函数没有对应的标准通用内函数,其数据类型按常用数据类型处理规则确定。

四倍精度函数必须用于 REAL*16 语句中。

表 1–4 四倍精度 libm 函数

函数名 

返回类型 

q_copysign( x, y )

q_fabs( x )

q_fmod( x )

q_infinity( )

REAL*16

REAL*16

REAL*16

REAL*16

iq_finite( x )

iq_fp_class( x )

iq_ilogb( x )

iq_isinf( x )

iq_isnan( x )

iq_isnormal( x )

iq_issubnormal( x )

iq_iszero( x )

iq_signbit( x )

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

q_max_normal()

q_max_subnormal()

q_min_normal()

q_min_subnormal()

q_nextafter( x, y )

q_quiet_nan( n )

q_remainder( x, y )

q_scalbn( x, n )

q_signaling_nan( n )

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

如果需要使用其他任何四倍精度 libm 函数,可以在调用前使用 $PRAGMA C(fcn) 来进行调用。有关详细信息,请参见《Fortran 编程指南》中介绍 C–Fortran 接口的章节。