Fortran:数量很少的浮点算法

时间:2019-03-14 15:55:06

标签: floating-point fortran

我想在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也不够精确。我该怎么做才能完善它们?谢谢!

0 个答案:

没有答案