我通常使用这种形式在我的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)
甚至有可能引起问题吗?
答案 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