说我有以下程序:
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.0
和b=3.0
,那么然后定义c=a/b
我会得到0.666666666666666666685
的输出,这很好。我如何将变量定义为整数的商,并将它存储在selected_real_kind
所需的所有精度数字中?
答案 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
的类型的方式。