fortran 编程运行程序 出现段错误 求助 在线等
programbsrimplicitnonereal(kind=8),external::K1write(*,*)K1()endfunctionK1()implicitn...
program bsr
implicit none
real(kind=8),external::K1
write(*,*)K1()
end
function K1()
implicit none
real(kind=8),external::I
real(kind=8),parameter::wqd=1e-2
real(kind=8)::u=0.593
real(kind=8)::K1
integer:: m=1
real(kind=8):: su,su1
su=-(log(u/2.0)+0.57722)*I(0)
do
su1=su
su=su1+(2.0/m)*I(m)
m=m+1
if(abs(su-su1)<=wqd) exit
enddo
K1=su
return
end function
function I(m)
implicit none
integer,external::fact
real(kind=8),parameter::wqd=1e-2
real(kind=8)::u=0.593
integer::m,k=0
real(kind=8)::sv1,sv=0
real(kind=8)::I
do
sv1=sv
sv=sv1+(((u/2.0)**(2.0*k+m))/(fact(k)*fact(k+m)))
k=k+1
if(abs(sv-sv1)<=wqd) exit
enddo
I=sv
return
end function
recursive integer function fact(k) result(ans)
implicit none
integer::k
if(k<=1) then
ans=1
else
ans=k*fact(k-1)
endif
return
end function 展开
implicit none
real(kind=8),external::K1
write(*,*)K1()
end
function K1()
implicit none
real(kind=8),external::I
real(kind=8),parameter::wqd=1e-2
real(kind=8)::u=0.593
real(kind=8)::K1
integer:: m=1
real(kind=8):: su,su1
su=-(log(u/2.0)+0.57722)*I(0)
do
su1=su
su=su1+(2.0/m)*I(m)
m=m+1
if(abs(su-su1)<=wqd) exit
enddo
K1=su
return
end function
function I(m)
implicit none
integer,external::fact
real(kind=8),parameter::wqd=1e-2
real(kind=8)::u=0.593
integer::m,k=0
real(kind=8)::sv1,sv=0
real(kind=8)::I
do
sv1=sv
sv=sv1+(((u/2.0)**(2.0*k+m))/(fact(k)*fact(k+m)))
k=k+1
if(abs(sv-sv1)<=wqd) exit
enddo
I=sv
return
end function
recursive integer function fact(k) result(ans)
implicit none
integer::k
if(k<=1) then
ans=1
else
ans=k*fact(k-1)
endif
return
end function 展开
2个回答
展开全部
什么叫段错误??
这段代码在我的编译器上没有编译错误,没有链接错误,也没有运行时错误。
只不过由于算法原因,可能未收敛,循环一直无法中止。(具体算法我没有分析)
这段代码在我的编译器上没有编译错误,没有链接错误,也没有运行时错误。
只不过由于算法原因,可能未收敛,循环一直无法中止。(具体算法我没有分析)
更多追问追答
追问
运行时,我等了很长时间出现段错误。这是第二类贝塞耳函数的程序 。函数K求得是第二类贝塞儿函数,函数I求得是第一类贝塞儿函数 函数fact 求得时阶乘 运行了好几次都是段错误。 我用gdb调试 ,出现在 52行 就是 ans=k*fact(k-1) k=2时 ,,,可是我把我的阶乘函数单写之后发现正确啊。
追答
integer 变量最多可以存储到 4294967296。
而 13 的阶乘就等于 6227020800,超出了 integer 的可表达范围。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询