下列函数和子例程属于 Fortran 数学库。它们适用于使用 f95 编译的所有程序。这些例程属于非内例程,它们的参数采用特定数据类型并且返回值也是相同的数据类型。要使用非内例程,必须在引用它们的例程中进行声明。
其中许多例程都是“包装器”,即 C 语言库中例程的 Fortran 接口,它们本身并不是 Fortran 标准例程,其中包括 IEEE 推荐的支持函数以及专用的随机数生成器。有关这些库的更多信息,请参见《数值计算指南》以及 libm_single(3F)、libm_double(3F) 和 libm_quadruple(3F) 手册页。
这些子程序是单精度数学函数和子例程。
通常,下文介绍的函数可以访问单精度数学函数,它们没有对应的 Fortran 标准通用内函数,其数据类型按常用数据类型处理规则确定。
不必使用 REAL 语句对这些函数进行显式类型处理,只要保留缺省的类型处理即可。(以 "r" 开头的名称表示 REAL,以 "i" 开头的名称表示 INTEGER。)
有关这些例程的详细信息,参见 C 数学库手册页 (3M)。例如,有关 r_acos(x) 的信息,请参见 acos(3M) 手册页。
表 1–2 单精度数学函数
函数名 |
返回类型 |
说明 |
---|---|---|
REAL REAL REAL REAL REAL |
-- -- -- |
|
REAL REAL REAL REAL REAL |
反正切 -- 反双曲正切 -- -- |
|
REAL REAL REAL REAL REAL |
-- -- -- |
|
REAL REAL REAL |
-- -- |
|
REAL REAL REAL |
-- |
|
REAL REAL REAL REAL REAL |
余弦 -- -- -- |
|
REAL REAL |
-- |
|
REAL REAL REAL REAL |
-- |
|
REAL REAL REAL |
-- |
|
INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER |
-- -- -- -- -- -- -- -- -- -- |
|
REAL 子例程 REAL 子例程 子例程 | ||
REAL REAL REAL REAL |
-- -- -- |
|
REAL REAL REAL REAL REAL REAL REAL REAL REAL REAL REAL REAL |
|
|
REAL REAL REAL REAL REAL |
-- 双曲正弦 -- -- |
|
子例程 子例程 子例程 子例程 |
正弦和余弦 -- -- -- |
|
REAL REAL REAL REAL REAL |
-- -- -- |
|
REAL REAL REAL |
-- -- |
变量 c、l、p、s、u、x 和 y 的类型为 REAL。变量 n 的类型为 INTEGER。
如果使用了会将名称以 "r" 开头的函数声明为另外一种数据类型的 IMPLICIT 语句,则应将这些函数的类型显式声明为 REAL。
sind(x) 和 asind(x) 等函数采用度数,而不是弧度。
另请参见:intro(3M) 和《数值计算指南》。
以下子程序为双精度数学函数和子例程。
通常,这些函数没有对应的 Fortran 标准通用内函数,其数据类型按常用数据类型处理规则确定。
这些 DOUBLE PRECISION 函数应该用于 DOUBLE PRECISION 语句中。
有关详细信息,请参阅 C 库手册页: acos(3M) 手册页中介绍了 d_acos(x)。
表 1–3 双精度数学函数
函数名 |
返回类型 |
说明 |
---|---|---|
DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION |
反余弦 -- -- -- |
|
DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION |
反正切 -- -- -- |
|
DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION |
反正弦 -- 反双曲正弦 -- -- |
|
DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION |
反正切 -- -- |
|
DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION |
立方根 计算大于或等于 x 的最小整数 -- |
|
DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION |
余弦 -- 双曲余弦 -- -- |
|
DOUBLE PRECISION DOUBLE PRECISION |
误差函数 -- |
|
DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION |
计算不大于 x 的下一个整数 计算直角三角形的斜边长度 -- |
|
DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION |
-- -- |
|
INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER |
|
|
DOUBLE PRECISION 子例程 DOUBLE PRECISION 子例程 子例程 |
随机数生成器 |
|
DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION |
gamma(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 |
|
|
DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION |
正弦 -- 双曲正弦 -- -- |
|
子例程 子例程 子例程 子例程 |
正弦和余弦 -- -- |
|
DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION |
正切 -- -- -- |
|
DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION |
-- -- |
变量 c、l、p、s、u、x 和 y 的类型为 DOUBLE PRECISION。变量 n 的类型为 INTEGER。
应在 DOUBLE PRECISION 语句中或者通过适当的 IMPLICIT 语句显式声明这些函数的类型。
sind(x) 和 asind(x) 等函数采用度数,而不是弧度。
另请参见:intro(3M) 和《数值计算指南》。
以下子程序为四倍精度 (REAL*16) 数学函数和子例程。
通常,这些函数没有对应的标准通用内函数,其数据类型按常用数据类型处理规则确定。
四倍精度函数必须用于 REAL*16 语句中。
表 1–4 四倍精度 libm 函数
函数名 |
返回类型 |
---|---|
REAL*16 REAL*16 REAL*16 REAL*16 |
|
INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER |
|
REAL*16 REAL*16 REAL*16 REAL*16 REAL*16 REAL*16 REAL*16 REAL*16 REAL*16 |
变量 c、l、p、s、u、x 和 y 的类型为四倍精度。变量 n 的类型为 INTEGER。
应使用 REAL*16 语句或者通过适当的 IMPLICIT 语句显式声明这些函数的类型。
sind(x) 和 asind(x) 等函数采用度数,而不是弧度。
如果需要使用其他任何四倍精度 libm 函数,可以在调用前使用 $PRAGMA C(fcn) 来进行调用。有关详细信息,请参见《Fortran 编程指南》中介绍 C–Fortran 接口的章节。