我在这部分代码中遇到浮点溢出错误。你们中的任何人都可以帮助我找出原因。
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
答案 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))
。这样做会很好。