Fortran 提高整数商定义变量的精度

Fortran 提高整数商定义变量的精度,fortran,precision,Fortran,Precision,假设我有以下程序: program derp implicit none integer, parameter :: ikind = selected_real_kind(18) real (kind = ikind) :: a = 2.0 / 3.0 print*, a end program derp 程序derp输出0.6666666 865348815917,这显然不是18位精度。但是,如果我使用相同的方法定义a=2.0和b=3.0,然后定义c=a/b,

假设我有以下程序:

program derp
    implicit none
    integer, parameter :: ikind = selected_real_kind(18)
    real (kind = ikind) :: a = 2.0 / 3.0
    print*, a
end program derp
程序
derp
输出
0.6666666 865348815917
,这显然不是18位精度。但是,如果我使用相同的方法定义
a=2.0
b=3.0
,然后定义
c=a/b
,我会得到
0.666666666 85
,这很好。如何将一个变量定义为整数的商,并让它存储所选的所有精度数字?

尝试:
real(kind=ikind)::a=2.0\u ikind/3.0\u ikind


原因是虽然LHS是高精度的,但代码示例2.0/3.0中的RHS不是。Fortran以单精度进行计算,然后将结果分配给LHS。RHS侧的计算精度不高,因为LHS的精度很高
digits\u kind
是指定常量类型的方法
digits

非常好,谢谢。你必须手动完成这项工作,这有点俗气,但我可以接受。在Fortran中,RHS是在不考虑LHS的情况下进行评估的,然后进行赋值,这是一件基本的事情。还有更多的情况,这是至关重要的。不考虑LHS精度的RHS评估并不是fortran独有的。如果你做a=2/3,你会期望一个浮点运算(也许你的意思是整数运算)。fortran的独特之处(可能)是默认为单精度。糟糕的是,没有一种标准的方法来设置默认值。是的,对不起,我的意思是,我必须对整数算术定义的每个变量都这样做(我正在处理的程序有几百个)。通过查找“.0”的实例并替换为“.0ikind”,这很容易做到。