FORTRAN 95把固有过程作为标准来提出,就意味着任何的FORTRAN 95的编译器实现版本,都必须能够提供它们:115个固有过程,其中包括109个固有函数和6个固有子例行程序。当然不排除很多的编译器还提供额外的固有过程。
表14-1 种过程的过程名称以及相应的变元属性
类过程名称 | 种过程名称及其变元 | 种过程变元类型 |
ABS | ABS(A) CABS(A) DABS(A) IABS(A) | 默认实型 默认复型 双精度实型 默认整型 |
ACOS | ACOS(X) DACOS(X) | 默认实型 双精度实型 |
AIMAG | AIMAG(Z) | 默认复型 |
AINT | AINT(A) DINT(A) | 默认实型 双精度实型 |
ANINT | ANINT(A) DNINT(A) | 默认实型 双精度实型 |
ASIN | ASIN(X) DSIN(X) | 默认实型 双精度实型 |
ATAN | ATAN(A) DTAN(A) | 默认实型 双精度实型 |
ATAN2 | ATAN2(A) DTAN2(A) | 默认实型 双精度实型 |
CHAR | *CHAR(I) | 默认整型 |
COS | COS(X) CCOS(X) DCOS(X) | 默认实型 默认复型 双精度实型 |
CONJG | CONJG(X) | 默认复型 |
COSH | COSH(X) DCOSH(X) | 默认实型 双精度实型 |
DIM | DIM(X,Y) IDIM(X,Y) | 默认实型 默认整型 |
DPROD | DPROD(X,Y) | 默认实型 |
EXP | EXP(X) CEXP(X) DEXP(X) | 默认实型 默认复型 双精度实型 |
ICHAR | *ICHAR(C) | 默认字符型 |
INDEX | INDEX(STRING,SUBSTRING) | 默认字符型 |
INT | *INT(A) *IFIX(A) *IDINT(A) | 默认实型 默认实型 双精度实型 |
LEN | LEN(STRING) | 默认字符型 |
LGE | *LGE(STRING_A,STRING_B) | 默认字符型 |
LGT | *LGT(STRING_A,STRING_B) | 默认字符型 |
LLE | *LLE(STRING_A,STRING_B) | 默认字符型 |
LLT | *LLT(STRING_A,STRING_B) | 默认字符型 |
LOG | ALOG(X) CLOG(X) DLOG(X) | 默认实型 默认复型 双精度实型 |
LOG10 | ALOG10(X) DLOG10(X) | 默认实型 双精度实型 |
MAX
注1 注2 | *MAX0(A1,A2,A3,…) *AMAX1(A1,A2,A3,…) *DMAX1(A1,A2,A3,…) *MAX1(A1,A2,A3,…) *AMAX0(A1,A2,A3,…) | 默认整型 默认实型 双精度实型 默认实型 默认整型 |
MIN
注1 注2 | *MIN0(A1,A2,A3,…) *AMIN1(A1,A2,A3,…) *DMIN1(A1,A2,A3,…) *MIN1(A1,A2,A3,…) *AMIN0(A1,A2,A3,…) | 默认整型 默认实型 双精度实型 默认实型 默认整型 |
MOD | MOD(A,P) AMOD(A,P) DMOD(A,P) | 默认整型 默认实型 双精度实型 |
NINT | NINT(A) IDNINT(A) | 默认实型 双精度实型 |
REAL | *REAL(A) *FLOAT(A) *SNGL(A) | 默认整型 默认整型 双精度实型 |
SIGN | SIGN(A,B) DSIGN(A,B) ISIGN(A,B) | 默认实型 双精度实型 默认整型 |
SIN | SIN(X) CSIN(X) DSIN(X) | 默认实型 默认复型 双精度实型 |
SINH | SINH(X) DSINH(X) | 默认实型 双精度实型 |
SQRT | SQRT(X) CSQRT(X) SDQRT(X) | 默认实型 默认复型 双精度实型 |
TAN | TAN(X) DTAN(X) | 默认实型 双精度实型 |
TANH | TANH(X) DTANH(X) | 默认实型 双精度实型 |
注1:该函数没有相应的类过程名称,它的结果为默认整型。
注2:该函数没有相应的类过程名称,它的结果为默认实型。
注3:标注星号*的函数不能用作实元。
注4:某些种过程名称与其类过程名称一样。
表14-2 数组查询函数的名称以及返回值
函 数 名 称 | 返 回 值 |
ALLOCATED | 变元数组的分配状态 |
LBOUND | 一个数组或数组的一个维度的下界 |
SHAPE | 数组在每个维度上的元素的数目 |
SIZE | 数组的尺度,即其全部元素的数目 |
UBOUND | 一个数组或数组的一个维度的上界 |
表14-3 数值模式查询函数的名称以及返回值
函 数 名 称 | 返 回 值 |
DIGITS | 整数模式和实数模式公式里面的n值 |
EPSILON | 实变元的 的值 |
HUGE | 按照整数模式和实数模式所能够表示的最大数值 |
MINEXPONENT | 实变元所能够取得的最小的e值 |
MAXEXPONENT | 实变元所能够取得的最大的e值 |
PRECISION | 实数或复数的10进制精度 |
RADIX | 整数模式和实数模式公式里面的基数值 |
RANGE | 整数,实数或复数的10进制幂次范围 |
TINY | 实变元所能够取得的最小的正数值 |
注意:
● 这些函数的变元都不需要预先定义。
● 它们都是类过程,因为它们都能够用于任意类型的实变元。
● 除了EPSILON,MINEXPONENT,MAXEXPONENT这3个函数之外,它们都能够用于任意类型的整型变元。
表14-4 数字操作函数的名称以及返回值
函 数 名 称 | 返 回 值 |
EXPONENT | 实数值的实数模式表示公式里面的e值 |
FRACTION | 实数值的小数部分 |
NEAREST | 系统所能够表示的在给定方向上最接近第一个变元的数值 |
RRSPACING | 变元附近的最小间距的倒数 |
SCALE | 用给定的值替换e值 |
SET_EXPONENT | 把e值设置为给定的值 |
SPACING | 变元附近的最小绝对间距 |
这7个函数只能应用于实数环境,变元可以是任意类型的实数值,而且都是逐元函数。
表14-5 转换函数的名称以及返回值
函 数 名 称 | 返 回 值 |
ACHAR | 在ASCII字符集的指定位置的字符 |
AIMAG | 复数的虚部 |
AINT | 把一个实数截断为实型整数 |
ANINT | 把一个实数截断为最接近的实型整数 |
CHAR | 在系统字符集的指定位置的字符 |
CMPLX | 与变元相应的复数值 |
CONJG | 复数变元的共轭复数 |
DBLE | 与变元相应的双精度值 |
IACHAR | 指定字符在ASCII字符集里面的位置 |
IBITS | 以位表示的整型变元的指定子串 |
ICHAR | 指定字符在系统字符集里面的位置 |
INT | 变元被截断得到的整型值 |
LOGICAL | 与变元相应的逻辑型值 |
NINT | 把一个实数截断为最接近的整型值 |
REAL | 与变元相应的实型值 |
表14-6 数值计算函数的名称以及返回值
函 数 名 称 | 返 回 值 |
ABS | 变元的绝对值 |
ACOS | 变元的反余弦值 |
ASIN | 变元的反正弦值 |
ATAN | 变元的反正切值 |
ATAN2 | 复数变元(X,Y)的幅角弧度值 |
CEILING | 大于或等于变元值的最小整数值 |
COS | 变元的余弦值 |
COSH | 变元的双曲余弦值 |
DIM | 如果2个变元的差为正数,则返回差值,否则返回0 |
DOT_PRODUCT | 2个秩为1的数组的点积 |
DPROD | 2个单精度数值的双精度乘积 |
EXP | 自然指数函数 |
FLOOR | 小于或等于变元值的最大整数值 |
LOG | 自然对数函数 |
LOG10 | 以10为底的对数函数 |
MATMUL | 矩阵乘积 |
MAX | 一个值集合里面的最大值 |
MIN | 一个值集合里面的最小值 |
MOD | 求余函数,其符号与第一个变元的符号一致 |
MODULO | 求余函数,其符号与第二个变元的符号一致 |
SIGN | 赋予给定值给定的符号 |
SIN | 变元的正弦值 |
SINH | 变元的双曲正弦值 |
SQRT | 变元的平方根 |
TAN | 变元的正切值 |
TANH | 变元的双曲正切值 |
表14-7 字符计算函数的名称以及返回值
函 数 名 称 | 返 回 值 |
ADJUSTL | 把字符串左边的空格移到它的右边 |
ADJUSTR | 把字符串右边的空格移到它的左边 |
INDEX | 一个子串在给定字符串里面的位置 |
LEN_TRIM | 删除尾部空格后的字符串长度 |
LGE | 基于ASCII序列的大于或等于的比较 |
LGT | 基于ASCII序列的大于的比较 |
LLE | 基于ASCII序列的小于或等于的比较 |
LLT | 基于ASCII序列的小于的比较 |
REPEAT | 重复连接字符串 |
SCAN | 扫描一个字符串以获得给定字符串在其中的位置 |
TRIM | 删除尾部空格后得到的字符串 |
VERIFY | 给出不属于指定字符集里面的字符在字符串里面出现的位置 |
表14-8 位计算函数的名称以及返回值
函 数 名 称 | 返 回 值 |
BTEST | 整型变元在指定的位上面的值 |
IAND | 2个整型变元的逻辑AND运算的结果 |
IBCLR | 把一个整型变元的指定的位上的值清0 |
IBSET | 把一个整型变元的指定的位上的值设置为1 |
IEOR | 2个整型变元的逻辑排除OR运算的结果 |
IOR | 2个整型变元的逻辑包含OR运算的结果 |
ISHFT | 对变元进行逻辑移位 |
ISHFTC | 对变元进行逻辑循环移位 |
NOT | 变元的逻辑补 |
注意:
● 计算函数当中除了LGE,LGT,LLE,LLT之外都是类过程。
● 计算函数当中除了DOT_PRODUCT,MATMUL,REPEAT之外都是逐元过程。
● 位计算函数的结果不可移植。
表14-9 数组简化函数的名称以及返回值
函 数 名 称 | 返 回 值 |
ALL | 如果变元数组的所有元素都是真则取真值 |
ANY | 如果变元数组的元素当中存在一个真值则取真值 |
COUNT | 变元数组的元素当中取真值的元素的数目 |
MAXVAL | 变元数组的元素当中的最大值 |
MINVAL | 变元数组的元素当中的最小值 |
PRODUCT | 变元数组的元素的乘积 |
SUM | 变元数组的元素的和 |
表14-10 数组构造函数的名称以及返回值
函 数 名 称 | 返 回 值 |
MERGE | 在过滤器的控制下组合2个合适的数组 |
PACK | 把一个过滤了的数组封装为一个向量 |
SPREAD | 通过复制某个维度而得到增加维度的数组 |
UNPACK | 从一个向量还原为一个过滤了的数组 |
3. 数组重组函数
数组重组函数只包含一个固有函数RESHAPE,它的功能是把一个秩为1的数组的元素重组为一个给定形状的数组。
4. 数组操作函数
数组操作函数对变元数组的元素进行重新排列,它们的的名称以及返回值见表14-11。
表14-11 数组操作函数的名称以及返回值
函 数 名 称 | 返 回 值 |
CSHIFT | 数组元素的循环移位 |
EOSHIFT | 数组元素的移位 |
TRANSPOSE | 变元数组的矩阵转置 |
5. 数组定位函数
数组定位函数给出数组元素里面的最大值或最小值在数组当中,或在数组的某个维度当中的位置,它们的的名称以及返回值见表14-12。
表14-12 数组定位函数的名称以及返回值
函 数 名 称 | 返 回 值 |
MAXLOC | 包含最大元素的秩为1的数组 |
MINLOC | 包含最小元素的秩为1的数组 |
● CPU_TIME
该固有子例行程序返回以秒为单位的处理器时间,它不包含具有INTENT(OUT)属性的变元。
● DATE_AND_TIME
该固有子例行程序返回日期与时间信息作为一些具有INTENT(OUT)属性的变元的值。
● MVBITS
该固有子例行程序把一个二进制码序列从一个整型数据对象复制到另一个整型数据对象。
该固有子例行程序是唯一的逐元固有子例行程序。
● RANDOM_NUMBER
该固有子例行程序返回一个伪随机数值或伪随机数组作为变元的取值。表面看来它应该可以作为一个函数,但是实际上它具有后效,即它每产生一个伪随机数结果,都会影响它底下的伪随机数生成器的变量的取值,因此它不是纯过程,而固有函数必须是纯过程。
● RANDOM_SEED
该固有子例行程序同样返回一个伪随机数值或伪随机数组作为变元的取值。但它还允许对它底下的伪随机数生成器的变量进行特定的初始化或恢复原来的取值。
● SYSTEM_CLOCK
该固有子例行程序以整数形式返回处理器时钟信息,可以有几种格式,并且可以作为具有INTENT(OUT)属性的变元的值。