【发布时间】:2018-08-28 23:06:23
【问题描述】:
我使用的是 intel fortran 2016。我定义了一些精度变量如下:
! definition of single, double and quad precision
integer, parameter :: SINGLE_PRECISION = selected_real_kind(6, 37)
integer, parameter :: DOUBLE_PRECISION = selected_real_kind(15, 307) ! is used as standard precision
integer, parameter :: QUAD_PRECISION = selected_real_kind(33, 4931)
! definition of variable precision for REAL, INTEGER
integer, parameter :: REAL_TYPE = DOUBLE_PRECISION
integer, parameter :: INTEGER_TYPE = 4
我现在想使用这些来控制在子例程中声明的参数的精度,如下所示:
SUBROUTINE SKIP(IUNIT,NBYTS)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
Character c*1
Parameter(n1 = 1024, nT1 = 8*n1)
我尝试了以下方法:
Parameter(INTEGER_TYPE)((n1 = 1024, nT1 = 8*n1)
Parameter(INTEGER_TYPE)((n1 = 1024, nT1 = 8*n1, kind = INTEGER_TYPE)
一切都无济于事。在 Fortran 中定义参数精度的正确方法是什么?
谢谢
【问题讨论】:
-
如果您将现代 Fortran 与种类一起使用,请不要使用隐式类型和参数语句。只需在一个语句中定义参数的类型和值,如下面的答案所示(与您定义自己的种类参数的方式完全相同)。并使用 IMPLICIT NONE,它可以为您节省数小时甚至数天的调试时间。
标签: fortran