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

Mr.*_*. G 5 precision fortran

说我有以下程序:

program derp
    implicit none
    integer, parameter :: ikind = selected_real_kind(18)
    real (kind = ikind) :: a = 2.0 / 3.0
    print*, a
end program derp
Run Code Online (Sandbox Code Playgroud)

程序derp输出0.6666666865348815917,显然不是18位精度.但是,如果我定义a=2.0b=3.0使用相同的方法,然后定义c=a/b我得到一个输出0.666666666666666666685,这是好的.我如何将变量定义为整数的商并让它存储我想要的所有精度数字selected_real_kind

M. *_* B. 8

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

原因是虽然LHS是高精度的,但代码示例中的RHS(2.0/3.0)却不是.Fortran以单精度进行计算,然后将结果分配给LHS.由于LHS具有高精度,因此不能以更高的精度计算RHS侧.digits_kind是指定常量类型的方法digits.

  • 在Fortran中,RHS是在不考虑LHS的情况下进行评估然后分配的.还有更多情况,这是至关重要的. (4认同)