Sun Studio 12:Fortran 库参考

第 3 章 FORTRAN 77 和 VMS 内函数

本章列出了FORTRAN 77 f95 接受的一系列内函数,旨在帮助将传统的 FORTRAN 77 程序迁移至 Fortran 95。

在 f95 中,本章列出的所有 FORTRAN 77 和 VMS 函数以及前一章列出的所有 Fortran 95 函数都识别为内函数。为了帮助从传统的 FORTRAN 77 程序迁移至 f95,使用 -f77=intrinsics 进行编译会让编译器只将 FORTRAN 77 和 VMS 函数识别为内函数,但 Fortran 95 函数不会识别为内函数。

属于 Sun 扩展的 ANSI FORTRAN 77 标准的内函数标有 ¤ 符号。使用非标准内函数和库函数的程序可能无法移植到其他平台。

内函数在接受多种数据类型的参数时,有通用名称和专用名称。通常,通用名称返回与参数具有相同数据类型的值。但也有一些例外,如类型转换函数(表 3–2)和查询函数(表 3–7)。这些函数也可以通过函数的某个专用名称进行调用,以便处理专用参数数据类型。

对于处理多个数据项的函数(例如 sign(a1,a2)),所有数据参数的类型必须相同。

下表按以下几方面列出 FORTRAN 77 内函数:

3.1 算术和数学函数

本节详细介绍算术函数、类型转换函数、三角函数以及其他函数。“a”代表函数的单个参数,“a1”和“a2”代表两个参数函数的第一个参数和第二个参数,“ar”和“ai”代表函数的复数参数的实部和虚部。

3.1.1 算术函数

表 3–1 Fortran 77 算术函数

内函数 

定义 

参数 

数量 

通用 

名称 

专用 

名称 

参数 

类型 

函数类型 

绝对值 

请参见注释 (6)。

|a| = 

(ar2+ai2)1/2

1 

ABS

IABS

ABS

DABS

CABS

QABS ¤

ZABS ¤

CDABS ¤

CQABS ¤

INTEGER

REAL

DOUBLE

COMPLEX

REAL*16

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

INTEGER

REAL

DOUBLE

REAL

REAL*16

DOUBLE

DOUBLE

REAL*16

截断 

请参见注释 (1)。

int(a) 

1 

AINT

AINT

DINT

QINT ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

最近的整数 

如果 a ≥ 0,则为 int(a+.5) 

如果 a < 0,则为 int(a-.5) 

1 

ANINT

ANINT

DNINT

QNINT ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

最近的整数 

如果 a ≥ 0,则为 int(a+.5) 

如果 a < 0,则为 int(a-.5) 

1 

NINT

NINT

IDNINT

IQNINT ¤

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

余数 

请参见注释 (1)。

a1-int(a1/a2)*a2 

2 

MOD

MOD

AMOD

DMOD

QMOD ¤

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

符号传输 

如果 a2 ≥ 0,则为 |a1|  

如果 a2 < 0,则为 -|a1|  

2 

SIGN

ISIGN

SIGN

DSIGN

QSIGN ¤

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

正偏差 

如果 a1 > a2,则为 a1-a2 

如果 a1≤ a2,则为 0 

2 

DIM

IDIM

DIM

DDIM

QDIM ¤

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

两倍和四倍乘积 

a1 * a2 

2 

-

DPROD

QPROD ¤

REAL

DOUBLE

DOUBLE

REAL*16

选择最大的值 

max(a1, a2, …) 

≥2 

MAX

MAX0

AMAX1

DMAX1

QMAX1 ¤

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

AMAX0

AMAX0

INTEGER

REAL

MAX1

MAX1

REAL

INTEGER

选择最小的值 

min(a1, a2, …) 

≥2 

MIN

MIN0

AMIN1

DMIN1

QMIN1 ¤

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

AMIN0

AMIN0

INTEGER

REAL

MIN1

MIN1

REAL

INTEGER

3.1.2 类型转换函数

表 3–2 Fortran 77 类型转换函数

转换为 

参数数量 

通用名称 

专用 

名称 

参数类型 

函数类型 

INTEGER


  请参见注释 (1)。

1 

INT

-

INT

IFIX

IDINT

-

-

-

IQINT ¤

INTEGER

REAL

REAL

DOUBLE

COMPLEX

COMPLEX*16

COMPLEX*32

REAL*16

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

INTEGER

REAL


  请参见注释 (2)。

1 

REAL

REAL

FLOAT

-

SNGL

SNGLQ ¤

-

-

-

FLOATK

INTEGER

INTEGER

REAL

DOUBLE

REAL*16

COMPLEX

COMPLEX*16

COMPLEX*32

INTEGER*8

REAL

REAL

REAL

REAL

REAL

REAL

REAL

REAL

REAL*4

DOUBLE


   请参见注释 (3)。

1 

DBLE

DBLE

DFLOAT

DFLOATK

DREAL ¤

-

-

-

-

-

DBLEQ ¤-

INTEGER

INTEGER

INTEGER*8

REAL

DOUBLE

COMPLEX

COMPLEX*16

REAL*16

COMPLEX*32REAL*16COMPLEX*32

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISION

DOUBLE PRECISIONDOUBLE PRECISION

DOUBLE PRECISION


REAL*16
   请参见注释 (3’)。

1 

QREAL¤

QEXT ¤

QREAL ¤

QFLOAT ¤

-

QEXT ¤

QEXTD ¤

-

-

-

-

INTEGER

INTEGER

REAL

INTEGER

DOUBLE

REAL*16

COMPLEX

COMPLEX*16

COMPLEX*32

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16

REAL*16


COMPLEX
  请参见注释 (4) 和 (8)。

1 个或 2 个 


CMPLX

-

-

-

-

-

-

-

INTEGER

REAL

DOUBLE

REAL*16

COMPLEX

COMPLEX*16

COMPLEX*32

COMPLEX

COMPLEX

COMPLEX

COMPLEX

COMPLEX

COMPLEX

COMPLEX


DOUBLE COMPLEX
   请参见注释 (8)。

1 个或 2 个 


DCMPLX@

-

-

-

-

-

-

-

INTEGER

REAL

DOUBLE

REAL*16

COMPLEX

COMPLEX*16

COMPLEX*32

DOUBLE COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX


COMPLEX*32
   请参见注释 (8)。

1 个或 2 个 


QCMPLX@

-

-

-

-

-

-

-

INTEGER

REAL

DOUBLE

REAL*16

COMPLEX

COMPLEX*16

COMPLEX*32

COMPLEX*32

COMPLEX*32

COMPLEX*32

COMPLEX*32

COMPLEX*32

COMPLEX*32

COMPLEX*32


INTEGER
   请参见注释 (5)。

1 


-
-

ICHAR

IACHAR ¤

CHARACTER

INTEGER


CHARACTER
   请参见注释 (5)。

1 


-
-

CHAR

ACHAR ¤

INTEGER

CHARACTER

在 ASCII 平台上(包括 Sun 系统):

在非 ASCII 平台上,ACHAR 和 IACHAR 专门用于提供一种直接处理 ASCII 的方法。

3.1.3 三角函数

表 3–3 Fortran 77 三角函数

内函数 

定义 

参数数量 

通用名称 

专用 

名称 

参数类型 

函数类型 

正弦 

请参见注释 (7)。

sin(a) 

1 

SIN

SIN

DSIN

QSIN ¤

CSIN

ZSIN ¤

CDSIN ¤

CQSIN ¤

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

正弦(度数) 

请参见注释 (7)。

sin(a) 

1 

SIND ¤

SIND ¤

DSIND ¤

QSIND ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

余弦 

请参见注释 (7)。

cos(a) 

1 

COS

COS

DCOS

QCOS ¤

CCOS

ZCOS ¤

CDCOS ¤

CQCOS ¤

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

余弦(度数) 

请参见注释 (7)。

cos(a) 

1 

COSD ¤

COSD ¤

DCOSD ¤

QCOSD ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

正切 

请参见注释 (7)。

tan(a) 

1 

TAN

TAN

DTAN

QTAN ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

正切(度数) 

请参见注释 (7)。

tan(a) 

1 

TAND ¤

TAND ¤

DTAND ¤

QTAND ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

反正弦 

请参见注释 (7)。

arcsin(a) 

1 

ASIN

ASIN

DASIN

QASIN ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

反正弦(度数) 

请参见注释 (7)。

arcsin(a) 

1 

ASIND ¤

ASIND ¤

DASIND ¤

QASIND ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

反余弦 

请参见注释 (7)。

arccos(a) 

1 

ACOS

ACOS

DACOS

QACOS ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

反余弦(度数) 

请参见注释 (7)。

arccos(a) 

1 

ACOSD ¤

ACOSD ¤

DACOSD ¤

QACOSD ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

反正切 

请参见注释 (7)。

arctan(a) 

1 

ATAN

ATAN

DATAN

QATAN ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

arctan 

(a1/a2) 

2 

ATAN2

ATAN2

DATAN2

QATAN2 ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

反正切(度数) 

请参见注释 (7)。

arctan(a) 

1 

ATAND ¤

ATAND ¤

DATAND ¤

QATAND ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

arctan 

(a1/a2) 

2 

ATAN2D¤

ATAN2D ¤

DATAN2D ¤

QATAN2D ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

双曲正弦 

请参见注释 (7)。

sinh(a) 

1 

SINH

SINH

DSINH

QSINH ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

双曲余弦 

请参见注释 (7)。

cosh(a) 

1 

COSH

COSH

DCOSH

QCOSH ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

双曲正切 

请参见注释 (7)。

tanh(a) 

1 

TANH

TANH

DTANH

QTANH ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

3.1.4 其他数学函数

表 3–4 其他 Fortran 77 数学函数

内函数 

定义 

参数数量 

通用名称 

专用名称 

参数类型 

函数类型 

复数的虚部 

请参见注释 (6)。

ai 

1 

IMAG

AIMAG

DIMAG ¤

QIMAG ¤

COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

共轭复数 

请参见注释 (6)。

(ar, -ai) 

1 

CONJG

CONJG

DCONJG ¤

QCONJG ¤

COMPLEX

DOUBLE COMPLEX

COMPLEX*32

COMPLEX

DOUBLE COMPLEX

COMPLEX*32

平方根 

a**(1/2) 

1 

SQRT

SQRT

DSQRT

QSQRT ¤

CSQRT

ZSQRT ¤

CDSQRT ¤

CQSQRT ¤

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

立方根 

请参见注释 (8’)。

a**(1/3) 

1 

CBRT

CBRT ¤

DCBRT ¤

QCBRT ¤

CCBRT ¤

ZCBRT ¤

CDCBRT ¤

CQCBRT ¤

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

指数 

e**a 

1 

EXP

EXP

DEXP

QEXP ¤

CEXP

ZEXP ¤

CDEXP ¤

CQEXP ¤

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

自然对数 

log(a) 

1 

LOG

ALOG

DLOG

QLOG ¤

CLOG

ZLOG ¤

CDLOG ¤

CQLOG ¤

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

COMPLEX

DOUBLE COMPLEX

DOUBLE COMPLEX

COMPLEX*32

常用对数 

log10(a) 

1 

LOG10

ALOG10

DLOG10

QLOG10 ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

误差函数 

(请参见下面的注释)

erf(a) 

1 

ERF

ERF ¤

DERF ¤

REAL

DOUBLE

REAL

DOUBLE

误差函数 

1.0 - erf(a) 

1 

ERFC

ERFC ¤

DERFC ¤

REAL

DOUBLE

REAL

DOUBLE

3.2 字符函数

表 3–5 Fortran 77 字符函数

内函数 

定义 

参数数量 

专用 

名称 

参数类型 

函数类型 

转换  

请参见注释 (5)。

转换为字符 

转换为整数 

另请参见:

表 3–2。

1 

1 

CHAR

ACHAR ¤

ICHAR

IACHAR ¤

INTEGER

CHARACTER

CHARACTER

INTEGER

子串的索引 

字符串 a1 中子串 a2 的位置 

请参见注释 (10)。

2 

INDEX

CHARACTER

INTEGER

长度 

字符实体的长度 

请参见注释 (11)。

1 

LEN

CHARACTER

INTEGER

词法上大于或等于 

a1 ≥ a2 

请参见注释 (12)。

2 

LGE

CHARACTER

LOGICAL

词法上大于 

a1 > a2 

请参见注释 (12)。

2 

LGT

CHARACTER

LOGICAL

词法上小于或等于 

a1≤ a2 

请参见注释 (12)。

2 

LLE

CHARACTER

LOGICAL

词法上小于 

a1 < a2 

请参见注释 (12)。

2 

LLT

CHARACTER

LOGICAL

在 ASCII 平台上(包括 Sun 系统):

在非 ASCII 平台上,ACHAR 和 IACHAR 专门用于提供一种直接处理 ASCII 的方法。

3.3 其他函数

其他一些函数包括按位函数、环境查询函数以及内存分配和解除分配函数。

3.3.1 位操作

这些函数都不属于 FORTRAN 77 标准。

表 3–6 Fortran 77 按位操作函数

按位操作 

参数数量 

专用名称 

参数类型 

函数类型 

补 

1 

NOT

INTEGER

INTEGER

与 

22 

AND IAND

INTEGER

INTEGER

或 

22 

OR IOR

INTEGER

INTEGER

异或 

22 

XOR IEOR

INTEGER

INTEGER

移位  

请参见注释 (14)。

2 

ISHFT

INTEGER

INTEGER

左移位  

请参见注释 (14)。

2 

LSHIFT

INTEGER

INTEGER

右移位  

请参见注释 (14)。

2 

RSHIFT

INTEGER

INTEGER

逻辑右移位  

请参见注释 (14)。

2 

LRSHFT

INTEGER

INTEGER

循环移位 

3 

ISHFTC

INTEGER

INTEGER

提取位 

3 

IBITS

INTEGER

INTEGER

设置位 

2 

IBSET

INTEGER

INTEGER

测试位 

2 

BTEST

INTEGER

LOGICAL

清除位 

2 

IBCLR

INTEGER

INTEGER

以上函数可用作内函数,也可以用作外部函数。另请参见《Fortran 库参考》手册中介绍的库位操作例程。

3.3.2 环境查询函数

这些函数都不属于 FORTRAN 77 标准。

表 3–7 Fortran 77 环境查询函数

定义 

参数数量 

通用名称 

参数类型 

函数类型 

编号系统的基数 

1 

EPBASE

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

INTEGER

有效位数 

1 

EPPREC

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

INTEGER

最小指数 

1 

EPEMIN

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

最大指数 

1 

EPEMAX

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

最小的非零数 

1 

EPTINY

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

可表示的最大数 

1 

EPHUGE

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

Epsilon 请参见注释 (16)。

1 

EPMRSP

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

3.3.3 内存

这些函数都不属于 FORTRAN 77 标准。

表 3–8 Fortran 77 内存函数

内函数 

定义 

参数数量 

专用名称 

参数类型 

函数类型 

位置 

地址 

请参见注释 (17)。

1 

LOC

任意

INTEGER*4INTEGER*8

分配 

分配内存并返回地址。 

请参见注释 (17)。

1 

MALLOC

MALLOC64

INTEGER*4

INTEGER*8

INTEGER

INTEGER*8

解除分配 

解除分配由 MALLOC 分配的内存。请参见注释 (17)。

1 

FREE

任意

- 

大小 

返回以字节数表示的参数大小 

请参见注释 (18)。

1 

SIZEOF

任意表达式

INTEGER

3.4 备注

以下备注适用于本章中的所有内函数表。

3.4.1 有关函数的注释

各表及注释 1 至 12 以《ANSI X3.9-1978 Programming Language FORTRAN》中的“Table of Intrinsic Functions”为基础,并增加了 Fortran 扩展。

(1) INT

如果 A 为整数类型,则 INT(A) 为 A。

如果 A 为实数或双精度类型:

如果 |A| < 1,则 INT(A) 为 0;如果 |A| ≥ 1,则 INT(A) 是最大的整数,但是不超过 A 的幅度,并且它的符号与 A 的符号相同。(这样的数学整数值可能太大,无法符合计算机整数类型的要求。)

如果 A 为复数或双复数类型,则以上规则适用于 A 的实部。

如果 A 为实数类型,则 IFIX(A) 与 INT(A) 相同。

(2) REAL

如果 A 为实数类型,则 REAL(A) 为 A。

如果 A 为整数或双精度类型,则 REAL(A) 的 A 有效部分的精度与实数据具有的精度差不多。

如果 A 为复数类型,则 REAL(A) 为 A 的实部。

如果 A 为双复数类型,则 REAL(A) 的 A 实部中有效部分的精度与实数据具有的精度差不多。

(3) DBLE

如果 A 为双精度类型,则 DBLE(A) 为 A。

如果 A 为整数或实数类型,则 DBLE(A) 的 A 有效部分的精度与双精度数据具有的精度差不多。

如果 A 为复数类型,则 DBLE(A) 的 A 实部中有效部分的精度与双精度数据具有的精度差不多。

如果 A 为 COMPLEX*16 类型,则 DBLE(A) 为 A 的实部。

(3’) QREAL

如果 A 为 REAL*16 类型,则 QREAL(A) 为 A。

如果 A 为整数、实数或双精度类型,则 QREAL(A) 的 A 有效部分的精度与 REAL*16 数据具有的精度差不多。

如果 A 为复数或双复数类型,则 QREAL(A) 的 A 实部中有效部分的精度与 REAL*16 数据具有的精度差不多。

如果 A 为 COMPLEX*16 或 COMPLEX*32 类型,则 QREAL(A) 为 A 的实部。

(4) CMPLX

如果 A 为复数类型,则 CMPLX(A) 为 A。

如果 A 为整数、实数或双精度类型,则 CMPLX(A) 为 REAL(A) + 0i。

如果 A1 和 A2 为整数、实数或双精度类型,则 CMPLX(A1,A2) 为 REAL(A1) + REAL(A2)*i。

如果 A 为双复数类型,则 CMPLX(A) 为 REAL( DBLE(A) ) + i*REAL( DIMAG(A) )。

如果 CMPLX 有两个参数,则它们的类型必须相同,可以是整数、实数或双精度类型。

如果 CMPLX 有一个参数,则它可以是整数、实数、双精度、复数、COMPLEX*16 或 COMPLEX*32 类型。

(4’) DCMPLX

如果 A 为 COMPLEX*16 类型,则 DCMPLX(A) 为 A。

如果 A 为整数、实数或双精度类型,则 DCMPLX(A) 为 DBLE(A) + 0i。

如果 A1 和 A2 为整数、实数或双精度类型,则 DCMPLX(A1,A2) 为 DBLE(A1) + DBLE(A2)*i。

如果 DCMPLX 有两个参数,则它们的类型必须相同,可以是整数、实数或双精度类型。

如果 DCMPLX 有一个参数,则它可以是整数、实数、双精度、复数、COMPLEX*16 或 COMPLEX*32 类型。

(5) ICHAR

ICHAR(A) 为 A 在整理序列中的位置。

第一个位置为 0,最后一个位置为 N-1, 0≤ICHAR(A)≤N-1,其中 N 是整理序列中的字符数,A 属于长度为 1 的字符类型。

CHAR 和 ICHAR 在以下几方面意义相反:

3.5 VMS 内函数

本节列出了 f95 可以识别的 VMS FORTRAN 内例程。当然,它们不是标准的例程。¤

3.5.1 VMS 双精度复数

表 3–9 VMS 双精度复数函数

通用名称 

专用名称 

功能 

参数类型 

结果类型 

 

CDABS

CDEXP

CDLOG

CDSQRT

绝对值 

指数,e**a

自然对数 

平方根 

COMPLEX*16

COMPLEX*16

COMPLEX*16

COMPLEX*16

REAL*8

COMPLEX*16

COMPLEX*16

COMPLEX*16

 

CDSIN

CDCOS

正弦 

余弦 

COMPLEX*16

COMPLEX*16

COMPLEX*16

COMPLEX*16

DCMPLX

DCONJG

DIMAG

DREAL

转换为 DOUBLE COMPLEX

复数共轭 

复数的虚部 

复数的实部 

任意数值

COMPLEX*16

COMPLEX*16

COMPLEX*16

COMPLEX*16

COMPLEX*16

REAL*8

REAL*8

3.5.2 VMS 度数型三角函数

表 3–10 VMS 度数型三角函数

通用名称 

专用名称 

功能 

参数类型 

结果类型 

SIND

SIND

DSIND

QSIND

正弦 

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

COSD

COSD

DCOSD

QCOSD

余弦 

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

TAND

TAND

DTAND

QTAND

正切 

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

ASIND

ASIND

DASIND

QASIND

反正弦 

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

ACOSD

ACOSD

DACOSD

QACOSD

反余弦 

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

ATAND

ATAND

DATAND

QATAND

反正切 

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

ATAN2D

ATAN2D

DATAN2D

QATAN2D

a1/a2 的反正切 

-

REAL*4

REAL*8

REAL*16

-

REAL*4

REAL*8

REAL*16

3.5.3 VMS 位操作

表 3–11 VMS 位操作函数

通用名称 

专用名称 

功能 

参数类型 

结果类型 

IBITS

IIBITS

JIBITS

KIBITS

从 a1 中初始位 a2 提取 a3 个位

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

ISHFT

IISHFT

JISHFT

KISHFT

将 a1 逻辑移动 a2 个位;如果 a2 是正数,则向左移动;如果 a2 是负数,则向右移动

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

ISHFTC

IISHFTC

JISHFTC

在 a1 中,将右边的 a3 个位循环移动 a2 个位置

-

INTEGER*2

INTEGER*4

-

INTEGER*2

INTEGER*4

IAND

IIAND

JIAND

a1、a2 的按位 AND

-

INTEGER*2

INTEGER*4

-

INTEGER*2

INTEGER*4

IOR

IIOR

JIOR

KIOR

a1、a2 的按位 OR

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

IEOR

IIEOR

JIEOR

KIEOR

a1、a2 的按位互斥 OR

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

NOT

INOT

JNOT

KNOT

按位补充 

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

IBSET

IIBSET

JIBSET

KIBSET

在 a1 中,将位 a2 设置为 1;返回新的 a1

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

BTEST

BITEST

BJTEST

BKTEST

如果 a1 的位 a2 为 1,则返回 .TRUE.

-

INTEGER*2

INTEGER*4

INTEGER*8

-

LOGICAL

LOGICAL

LOGICAL

IBCLR

IIBCLR

JIBCLR

KIBCLR

在 a1 中,将位 a2 设置为 0;返回新的 a1

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

3.5.4 VMS 多个整数类型

Fortran 标准没有解决可能出现的多个整数类型问题。编译器通过将专用的 INTEGER-to-INTEGER 函数名(IABS 等)视为一种特殊的通用名称,来处理出现的多个整数类型。可以使用参数类型选择相应的运行时例程名称,而程序员无法访问该名称。

VMS Fortran 采用了类似的方法,但是可以使用专用名称。

表 3–12 VMS 整数函数

专用名称 

功能 

参数类型 

结果类型 

IIABS

JIABS

KIABS

绝对值 

INTEGER*2

INTEGER*4

INTEGER*8

INTEGER*2

INTEGER*4

INTEGER*8

IMAX0

JMAX0

最大值 

INTEGER*2

INTEGER*4

INTEGER*2

INTEGER*4

IMIN0

JMIN0

最小值 

INTEGER*2

INTEGER*4

INTEGER*2

INTEGER*4

IIDIM

JIDIM

KIDIM

正偏差 

INTEGER*2

INTEGER*4

INTEGER*8

INTEGER*2

INTEGER*4

INTEGER*8

IMOD

JMOD

a1/a2 的余数 

INTEGER*2

INTEGER*4

INTEGER*2

INTEGER*4

IISIGN

JISIGN

KISIGN

符号传输,|a1|* sign(a2) 

INTEGER*2

INTEGER*4

INTEGER*8

INTEGER*2

INTEGER*4

INTEGER*8