说我有以下程序:
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.0并b=3.0使用相同的方法,然后定义c=a/b我得到一个输出0.666666666666666666685,这是好的.我如何将变量定义为整数的商并让它存储我想要的所有精度数字selected_real_kind?
尝试: real (kind = ikind) :: a = 2.0_ikind / 3.0_ikind
原因是虽然LHS是高精度的,但代码示例中的RHS(2.0/3.0)却不是.Fortran以单精度进行计算,然后将结果分配给LHS.由于LHS具有高精度,因此不能以更高的精度计算RHS侧.digits_kind是指定常量类型的方法digits.
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |