我是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编译器。
答案 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