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

时间:2019-08-01 19:53:46

标签: fortran language-lawyer precision

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

module A::Cool::Module
  module DB
     redis = Redis.new(host: ENV["REDIS_DEV_HOST"], port: 18163)
     redis.auth(ENV["REDIS_DEV_AUTH"])
  end


  struct CoolStruct
    include A::Cool::Module::DB
    def CoolFunciton
       A::Cool::Module::DB.redis # => undefined method 'redis'
    end
  end
end

但是,当连续定义多个变量时,use, intrinsic :: ISO_FORTRAN_ENV real(kind=real64) :: a = 5d0 变得非常重复。只是使用real(kind=real64)是很诱人的,尽管我避免这样做,因为有人告诉我,尽管不太可能,但它有可能使程序不可移植。

From another question I found on the subject我看到real*8有用,但是我不知道这是否是一个好习惯;似乎与使用real(real64)相同,因为至少在我的系统上,real64 =8。在变量声明中指定类型的方法比real(8)还短吗? real(kind=real64)甚至有可能引起问题吗?

1 个答案:

答案 0 :(得分:5)

两者之间的区别

coastlines

use, intrinsic :: ISO_FORTRAN_ENV
Real( kind = real64 ) :: a

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

use, intrinsic :: ISO_FORTRAN_ENV
Real( real64 ) :: a

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

use, intrinsic :: ISO_FORTRAN_ENV
Integer, Parameter :: wp = real64
Real( wp ) :: a