Sun Studio 12:Fortran 库参考

2.2 Fortran 2003 Module Routines

Fortran 2003 标准提供了一组内模块,它们定义了支持 IEEE 算术以及与 C 语言的互操作性所需的功能。

2.2.1 IEEE 算术和异常模块

Fortran 2003 标准内模块 IEEE_EXCEPTIONSIEEE_ARITHMETICIEEE_FEATURES 支持采用建议的语言标准的新功能,从而支持 IEEE 算术和 IEEE 异常处理。

草案标准定义了一组查询函数、基本函数、种类函数、基本子例程和非基本子例程。后面的表中列出了这些函数和子例程。

要访问这些函数和子例程,调用例程必须包括

USE, INTRINSIC :: IEEE_ARITHMETIC, IEEE_EXCEPTIONS

有关详细信息,请参见 Fortran 标准 (http://www.j3-fortran.org)。

2.2.1.1 查询函数

模块 IEEE_EXCEPTIONS 包含下列查询函数。

功能 

说明 

IEEE_SUPPORT_FLAG(FLAG[,X])

查询处理器是否支持异常。 

IEEE_SUPPORT_HALTING(FLAG)

查询处理器是否支持在出现异常后控制停止异常。 

模块 IEEE_ARITHMETIC 包含下列查询函数。

功能 

说明 

IEEE_SUPPORT_DATATYPE([X])

查询处理器是否支持 IEEE 算术。 

IEEE_SUPPORT_DENORMAL([X])

查询处理器是否支持非规范化的数值。 

IEEE_SUPPORT_DIVIDE([X])

查询处理器是否支持按 IEEE 标准规定的精度进行除法运算。 

IEEE_SUPPORT_INF([X])

查询处理器是否支持 IEEE 无穷大。 

IEEE_SUPPORT_IO([X])

查询处理器是否支持在格式化输入/输出期间进行 IEEE 基本转换舍入。 

IEEE_SUPPORT_NAN([X])

查询处理器是否支持 IEEE 非数值。 

IEEE_SUPPORT_ROUNDING(VAL[,X])

查询处理器是否支持特定的舍入模式。 

IEEE_SUPPORT_SQRT([X])

查询处理器是否支持 IEEE 平方根。 

IEEE_SUPPORT_STANDARD([X])

查询处理器是否支持所有的 IEEE 功能。 

2.2.1.2 基本函数

模块 IEEE_ARITHMETIC 包含参数为实数且满足特定条件(即下表中实数参数 XY 满足 IEEE_SUPPORT_DATATYPE(X)IEEE_SUPPORT_DATATYPE(Y) 为 true)的下列基本函数。

功能 

说明 

IEEE_CLASS(X)

IEEE 类 

IEEE_COPY_SIGN(X,Y)

IEEE 复制符号函数 

IEEE_IS_FINITE(X)

确定值是否为有限值。 

IEEE_IS_NAN(X)

确定值是否为 IEEE 非数值。 

IEEE_IS_NORMAL(X)

确定值是否正常。 

IEEE_IS_NEGATIVE(X)

确定值是否为负数。 

IEEE_LOGB(X)

采用 IEEE 浮点格式的无偏指数。 

IEEE_NEXT_AFTER(X,Y)

返回趋向 Y 的下一个可表示的 X 邻数。

IEEE_REM(X,Y)

IEEE REM 余数函数 X - Y*N,其中 N 是最接近 X/Y 精确值的整数。

IEEE_RINT(X)

根据当前的舍入模式舍入为整数值。 

IEEE_SCALB(X,I)

返回 X*2**I

IEEE_UNORDERED(X,Y)

IEEE 无序函数。如果 XY 为 NaN,则为 true,否则为 false。

IEEE_VALUE(X,CLASS)

生成 IEEE 值。 

2.2.1.3 种类函数

模块 IEEE_ARITHMETIC 包含以下转换函数:

功能 

说明 

IEEE_SELECTED_REAL_KIND([P,][R])

具有指定精度和范围的 IEEE 实数的种类类型参数值。 

2.2.1.4 基本子例程

模块 IEEE_EXCEPTIONS 包含下列基本子例程。

子例程 

说明 

IEEE_GET_FLAG(FLAG,FLAG_VALUE)

获取异常标志。 

IEEE_GET_HALTING_MODE(FLAG,HALTING)

获取异常的停止模式。 

2.2.1.5 非基本子例程

模块 IEEE_EXCEPTIONS 包含下列非基本子例程。

子例程 

说明 

IEEE_GET_STATUS(STATUS_VALUE)

获取浮点环境的当前状态。 

IEEE_SET_FLAG(FLAG,FLAG_VALUE)

设置异常标志。 

IEEE_SET_HALTING_MODE(FLAG,HALTING)

控制异常持续或停止。 

IEEE_SET_STATUS(STATUS_VALUE)

恢复浮点环境的状态。 

模块 IEEE_ARITHMETIC 包含下列非基本子例程。

子例程 

说明 

IEEE_GET_ROUNDING_MODE(ROUND_VAL)

获取当前的 IEEE 舍入模式。 

IEEE_SET_ROUNDING_MODE(ROUND_VAL)

设置当前的 IEEE 舍入模式。 

2.2.2 C 绑定模块

Fortran 2003 标准提供了一种引用 C 语言过程的方式。ISO_C_BINDING 模块按内模块函数形式定义了三个支持过程。访问这些函数需要在调用例程中使用

USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_LOC, C_PTR, C_ASSOCIATED

。该模块中定义的过程如下

功能 

说明 

C_LOC(X)

返回参数的 C 地址 

C_ASSOCIATED(C_PTR_1 [, C_PTR_2])

表示 C_PTR_1 的关联状态,或者表示 C_PTR_1C_PTR_2 是否与同一个实体关联。

C_F_POINTER(CPTR, FPTR [, SHAPE])

将指针与 C 指针的目标关联并指定其形式。 

有关 ISO_C_BINDING 内模块的详细信息,请参见 http://www.j3-fortran.org 上的 Fortran 2003 标准的第 15 章。