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

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) 

AINT

AINT

DINT

QINT ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

最近的整数 

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

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

ANINT

ANINT

DNINT

QNINT ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

最近的整数 

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

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

NINT

NINT

IDNINT

IQNINT ¤

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

余数 

请参见注释 (1)

a1-int(a1/a2)*a2 

MOD

MOD

AMOD

DMOD

QMOD ¤

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

符号传输 

如果 a2 ≥ 0,则为 |a1|  

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

SIGN

ISIGN

SIGN

DSIGN

QSIGN ¤

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

正偏差 

如果 a1 > a2,则为 a1-a2 

如果 a1≤ a2,则为 0 

DIM

IDIM

DIM

DDIM

QDIM ¤

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

两倍和四倍乘积 

a1 * a2 

-

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)

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)

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)。

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’)。

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)。


-
-

ICHAR

IACHAR ¤

CHARACTER

INTEGER


CHARACTER
   请参见注释 (5)。


-
-

CHAR

ACHAR ¤

INTEGER

CHARACTER

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

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

3.1.3 三角函数

表 3–3 Fortran 77 三角函数

内函数 

定义 

参数数量 

通用名称 

专用 

名称 

参数类型 

函数类型 

正弦 

请参见注释 (7)。

sin(a) 

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) 

SIND ¤

SIND ¤

DSIND ¤

QSIND ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

余弦 

请参见注释 (7)。

cos(a) 

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) 

COSD ¤

COSD ¤

DCOSD ¤

QCOSD ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

正切 

请参见注释 (7)。

tan(a) 

TAN

TAN

DTAN

QTAN ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

正切(度数) 

请参见注释 (7)。

tan(a) 

TAND ¤

TAND ¤

DTAND ¤

QTAND ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

反正弦 

请参见注释 (7)。

arcsin(a) 

ASIN

ASIN

DASIN

QASIN ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

反正弦(度数) 

请参见注释 (7)。

arcsin(a) 

ASIND ¤

ASIND ¤

DASIND ¤

QASIND ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

反余弦 

请参见注释 (7)。

arccos(a) 

ACOS

ACOS

DACOS

QACOS ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

反余弦(度数) 

请参见注释 (7)。

arccos(a) 

ACOSD ¤

ACOSD ¤

DACOSD ¤

QACOSD ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

反正切 

请参见注释 (7)。

arctan(a) 

ATAN

ATAN

DATAN

QATAN ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

arctan 

(a1/a2) 

ATAN2

ATAN2

DATAN2

QATAN2 ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

反正切(度数) 

请参见注释 (7)。

arctan(a) 

ATAND ¤

ATAND ¤

DATAND ¤

QATAND ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

arctan 

(a1/a2) 

ATAN2D¤

ATAN2D ¤

DATAN2D ¤

QATAN2D ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

双曲正弦 

请参见注释 (7)。

sinh(a) 

SINH

SINH

DSINH

QSINH ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

双曲余弦 

请参见注释 (7)。

cosh(a) 

COSH

COSH

DCOSH

QCOSH ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

双曲正切 

请参见注释 (7)。

tanh(a) 

TANH

TANH

DTANH

QTANH ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

3.1.4 其他数学函数

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

内函数 

定义 

参数数量 

通用名称 

专用名称 

参数类型 

函数类型 

复数的虚部 

请参见注释 (6)。

ai 

IMAG

AIMAG

DIMAG ¤

QIMAG ¤

COMPLEX

DOUBLE COMPLEX

COMPLEX*32

REAL

DOUBLE

REAL*16

共轭复数 

请参见注释 (6)。

(ar, -ai) 

CONJG

CONJG

DCONJG ¤

QCONJG ¤

COMPLEX

DOUBLE COMPLEX

COMPLEX*32

COMPLEX

DOUBLE COMPLEX

COMPLEX*32

平方根 

a**(1/2) 

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) 

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 

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) 

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) 

LOG10

ALOG10

DLOG10

QLOG10 ¤

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

误差函数 

(请参见下面的注释)

erf(a) 

ERF

ERF ¤

DERF ¤

REAL

DOUBLE

REAL

DOUBLE

误差函数 

1.0 - erf(a) 

ERFC

ERFC ¤

DERFC ¤

REAL

DOUBLE

REAL

DOUBLE

3.2 字符函数

表 3–5 Fortran 77 字符函数

内函数 

定义 

参数数量 

专用 

名称 

参数类型 

函数类型 

转换  

请参见注释 (5)。

转换为字符 

转换为整数 

另请参见:

表 3–2

CHAR

ACHAR ¤

ICHAR

IACHAR ¤

INTEGER

CHARACTER

CHARACTER

INTEGER

子串的索引 

字符串 a1 中子串 a2 的位置 

请参见注释 (10)。

INDEX

CHARACTER

INTEGER

长度 

字符实体的长度 

请参见注释 (11)。

LEN

CHARACTER

INTEGER

词法上大于或等于 

a1 ≥ a2 

请参见注释 (12)。

LGE

CHARACTER

LOGICAL

词法上大于 

a1 > a2 

请参见注释 (12)。

LGT

CHARACTER

LOGICAL

词法上小于或等于 

a1≤ a2 

请参见注释 (12)。

LLE

CHARACTER

LOGICAL

词法上小于 

a1 < a2 

请参见注释 (12)。

LLT

CHARACTER

LOGICAL

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

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

3.3 其他函数

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

3.3.1 位操作

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

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

按位操作 

参数数量 

专用名称 

参数类型 

函数类型 

补 

NOT

INTEGER

INTEGER

与 

22 

AND IAND

INTEGER

INTEGER

或 

22 

OR IOR

INTEGER

INTEGER

异或 

22 

XOR IEOR

INTEGER

INTEGER

移位  

请参见注释 (14)

ISHFT

INTEGER

INTEGER

左移位  

请参见注释 (14)。

LSHIFT

INTEGER

INTEGER

右移位  

请参见注释 (14)。

RSHIFT

INTEGER

INTEGER

逻辑右移位  

请参见注释 (14)。

LRSHFT

INTEGER

INTEGER

循环移位 

ISHFTC

INTEGER

INTEGER

提取位 

IBITS

INTEGER

INTEGER

设置位 

IBSET

INTEGER

INTEGER

测试位 

BTEST

INTEGER

LOGICAL

清除位 

IBCLR

INTEGER

INTEGER

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

3.3.2 环境查询函数

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

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

定义 

参数数量 

通用名称 

参数类型 

函数类型 

编号系统的基数 

EPBASE

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

INTEGER

有效位数 

EPPREC

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

INTEGER

最小指数 

EPEMIN

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

最大指数 

EPEMAX

REAL

DOUBLE

REAL*16

INTEGER

INTEGER

INTEGER

最小的非零数 

EPTINY

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

可表示的最大数 

EPHUGE

INTEGER

REAL

DOUBLE

REAL*16

INTEGER

REAL

DOUBLE

REAL*16

Epsilon 请参见注释 (16)。

EPMRSP

REAL

DOUBLE

REAL*16

REAL

DOUBLE

REAL*16

3.3.3 内存

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

表 3–8 Fortran 77 内存函数

内函数 

定义 

参数数量 

专用名称 

参数类型 

函数类型 

位置 

地址 

请参见注释 (17)。

LOC

任意

INTEGER*4INTEGER*8

分配 

分配内存并返回地址。 

请参见注释 (17)。

MALLOC

MALLOC64

INTEGER*4

INTEGER*8

INTEGER

INTEGER*8

解除分配 

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

FREE

任意

大小 

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

请参见注释 (18)

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 实部中有效部分的精度与双精度数据具有的精度差不多。

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

(3’) QREAL

如果 AREAL*16 类型,则 QREAL(A)A

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

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

如果 ACOMPLEX*16COMPLEX*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

如果 ACOMPLEX*16 类型,则 DCMPLX(A)A

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

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

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

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

(5) ICHAR

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

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

CHARICHAR 在以下几方面意义相反:

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

a1a2 的按位 AND

-

INTEGER*2

INTEGER*4

-

INTEGER*2

INTEGER*4

IOR

IIOR

JIOR

KIOR

a1a2 的按位 OR

-

INTEGER*2

INTEGER*4

INTEGER*8

-

INTEGER*2

INTEGER*4

INTEGER*8

IEOR

IIEOR

JIEOR

KIEOR

a1a2 的按位互斥 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