浮点溢出

时间:2016-12-05 22:07:24

标签: fortran fortran90 fortran95

我在这部分代码中遇到浮点溢出错误。你们中的任何人都可以帮助我找出原因。

do j=1,ny-1
  do i=1,nx-1

    sum = 0.0d0

    do k=0,1000
      n=2.0d0*dfloat(k)+ 1.0d0
      sum = sum + ((dsinh(n*pi*x(i))*dcos(n*pi*y(j)))/((n*n*pi*pi)*dsinh(2*n*pi)))
    end do

    ue(i,j)= (x(i)/(4.0d0))- 4.0d0*sum

  end do
end do

1 个答案:

答案 0 :(得分:4)

问题是中期dsinh(2*n*pi)。考虑k=1000。然后是n=2001,因此我们需要评估大约dsinh(2001*pi)或大约0.5*exp(6286)的{​​{1}}!这远远高于可以双精度表示的任何数字。您需要重新评估计算总和的方式。术语10^2700也存在问题。

我的猜测是,对商dsinh(n*pi*x(i))的稳健评估需要某种渐近扩展。对于dsinh(n*pi*x(i))/dsinh(2*n*pi),当0<x(i)<2变大时,此术语的行为应为exp(n*pi*(x(i)-2))。这样做会很好。