我遇到了一个关于局部变量初始化的令人惊讶的问题。
我有以下函数来计算伽玛
function gammar(z) result(gz)
implicit none
real(8),intent(out)::gz
real(8)::z,t,low,up
real(8),parameter::increment=1.0
real(8),parameter::lower_t=0.0,upper_t=10.0
integer(4)::i,n
!gz=0.0
n=(upper_t-lower_t)/increment
do i=1,n
low=lower_t+(i-1)*increment
up=lower_t+(i)*increment
gz=gz+(f(z,low)+f(z,up))*increment/2.0
end do
end function gammar
Then I call this function in main program like
df=9.0
t=0.0
write(*,*) gammar((df+1.0)/2.0)/sqrt(pi*df)/gammar(df/2.0)
我答错了!!0.126 我发现原因是在计算 gammar((df+1.0)/2.0) 之后,局部变量 gz 没有设置为 0。因此,在计算 gammar(df/2.0) 时,gz 仍然保留旧值 24。最终,gammar(df/2.0) 得到了错误的答案 34.. 如果我在 gammar 函数中添加 gz=0.0,这个问题就解决了。这真是令人惊讶。为什么每次调用 gammar 时本地 gz 没有初始化为零?
非常感谢
问候柯