我遇到了一個關於loacal變量初始化的問題。fortran結果變量未初始化
我得到了下面的函數來計算gammar
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沒有初始化爲零?
非常感謝
問候 柯