Я встретил неожиданную проблему с инициализацией 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 Я нашел причину после того, как была рассчитана гаммар ((df + 1.0) /2.0), локальная переменная gz не была установлена на 0. Следовательно, при вычислении gammar (df/2.0) gz все еще сохранял старое значение 24 . В конце концов, gammar (df/2.0) получил неправильный ответ 34 .. Если я добавлю gz = 0.0 в функцию гаммара, эта проблема была исправлена. Это действительно удивительно. Почему локальный gz не был инициализирован до нуля, когда гаммар вызывал каждый раз?
Большое спасибо
С уважением Ke