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

时间:2013-05-10 00:41:46

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

1 个答案:

答案 0 :(得分:8)

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

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