5

假设我有以下程序:

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.6666666865348815917,这显然不是 18 位精度。但是,如果我定义a=2.0b=3.0使用相同的方法,然后定义c=a/b,我会得到 的输出0.666666666666666666685,这很好。如何将变量定义为整数的商并让它存储我想要的所有精度数字selected_real_kind

4

1 回答 1

8

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

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

于 2013-05-10T00:56:24.947 回答