我想在Fortran中定义两个小的数字作为我的变量。我用两种方法测试它们,一种是使用Kind库,另一种是使用ISO_FORTRAN_ENV。这是我的程序:
implicit none
REAL(KIND=16) :: RE1=-1.7499576837060936950743114606D0
REAL(KIND=16) :: RE2=-1.7499576837060936950743114606
REAL(REAL128) :: RE3=-1.7499576837060936950743114606
REAL(REAL128) :: RE4=-1.7499576837060936950743114606D0
REAL(KIND=16) :: IM1=1.10787937065633798823892515031E-16
REAL(REAL128) :: IM2=1.10787937065633798823892515031E-16
REAL(REAL128) :: IM3=1.10787937065633798823892515031D-16
然后我让它们打印出来,我得到了:
RE1= -1.74995768370609372510671164491213858
RE2= -1.74995768070220947265625000000000000
RE3= -1.74995768070220947265625000000000000
RE4= -1.74995768370609372510671164491213858
IM1= 1.10787939033922229817297200327175233E-0016
IM2= 1.10787939033922229817297200327175233E-0016
IM3= 1.10787937065633795152588558542451007E-0016
通过比较它们,我发现REAL128等于kind = 16。并且,如果未在变量末尾指定D0,则程序不会将其作为两位数。因此,即使我将变量定义为kind = 16,我仍然需要最后添加D0吗?
此外,RE1仍然与我的输入不同,我们如何使其更加精确?
IM3也不够精确。我该怎么做才能完善它们?谢谢!