Fortran 双精度

Fortran DOUBLE precision

当我对双精度值进行求和时:

    REAL*8 :: a
    INTEGER :: p

    a = 0.0d0
    DO p = 1,10
    a = a + 1d-04   
    END DO

我得到以下答案:

    p =1 - a = 1.000000000000000D-004
    p =2 - a = 2.000000000000000D-004
    p =3 - a = 3.000000000000000D-004
    p =4 - a = 4.000000000000000D-004
    p =5 - a = 5.000000000000000D-004
    p =6 - a = 6.000000000000001D-004

为什么在交互 p=6 中我得到变量末尾的数字 1 'a'?

在 Fortran 中,双精度数(或实数)是浮点数(例如参见 [​​=10=] )。 浮点数不能正确表示每一个十进制数,会出现舍入错误。