Fortran程序输出错误?

时间:2016-11-30 22:50:03

标签: fortran

我是Fortran的新手,请原谅我,如果我在以下代码中做了一些愚蠢的事情:

program test2
    implicit none

    ! Variable declaration
    integer :: i, n
    real    :: s

    ! Initialization
    n = 1e+9
    s = 0.0

    do i=1,n
        s = s + real(i)
        s = s + sqrt(s)
    end do

    print *, s

end program test2

这个小程序输出:1.8014399E+16,我希望它能给1.0000000010000024E+18。我在Windows 10机器上使用GNU Fortran编译器。

1 个答案:

答案 0 :(得分:1)

好吧,我最终对double precision变量s使用了以下定义。该方法具有可重用和系统独立的优点。感谢@francescalus的评论。

program test2
    implicit none

    ! Variable declaration
    integer, parameter :: dp = kind(0.d0)
    integer  :: i, n
    real(dp) :: s

    ! Initialization
    n = 1e+9
    s = 0.0

    do i=1,n
        s = s + real(i)
        s = s + sqrt(s)
    end do

    print *, s

end program test2