是否有一种简短的可移植方式在Fortran中指定“种类”?

zae*_*aen 2 precision fortran language-lawyer

我通常使用这种形式在Fortran代码中获得双精度:

use, intrinsic :: ISO_FORTRAN_ENV
real(kind=real64) :: a = 5d0
Run Code Online (Sandbox Code Playgroud)

但是,当连续定义多个变量时,real(kind=real64)将变得非常重复。real*8尽管我避免这样做,但却很诱人,因为我被告知,尽管不太可能,但它有可能使程序不可移植。

从另一个关于该主题的问题中,我发现它是real(real64)有效的,但是我不知道这是否是一种好习惯;似乎与使用相同,real(8)因为至少在我的系统上,real64 =8。有没有比real(kind=real64)在变量声明中指定种类短的方法?甚至有real*8引起问题的现实机会吗?

Ian*_*ush 5

和...之间的不同

use, intrinsic :: ISO_FORTRAN_ENV
Real( kind = real64 ) :: a
Run Code Online (Sandbox Code Playgroud)

use, intrinsic :: ISO_FORTRAN_ENV
Real( real64 ) :: a
Run Code Online (Sandbox Code Playgroud)

是纯粹的风格。两者都是同等可移植的,并且就代码而言是相同的。实际上,我在理解为什么您认为它们不同时遇到了问题。如果您认为real64输入太长,可以随时使用

use, intrinsic :: ISO_FORTRAN_ENV
Integer, Parameter :: wp = real64
Real( wp ) :: a
Run Code Online (Sandbox Code Playgroud)

从技术上讲不是可移植的是使用5d0作为常量,并假定它是与real64相同的实数。双精度已经过时了,算了吧,宁愿正确使用同类机制

use, intrinsic :: ISO_FORTRAN_ENV
Integer, Parameter :: wp = real64
Real( wp ) :: a = 5.0_wp
Run Code Online (Sandbox Code Playgroud)

  • 或`使用,内在:: iso_fortran_env,wp => real64`。 (5认同)