【发布时间】:2023-03-22 23:58:01
【问题描述】:
为什么我会陷入无限循环?
PROGRAM tayls
USE kertoma
USE tforexp
IMPLICIT NONE
INTEGER :: n= 5
INTEGER :: i
REAL :: x
WRITE(*,*) "f1(x)= (e**x-1)/x"
DO i=1,10
x= 0.01*i
WRITE(*,*)x, (taylexp(x,n)-1)/x
END DO
END PROGRAM tayls
与
MODULE tforexp
USE kertoma
IMPLICIT NONE
CONTAINS
FUNCTION taylexp(x,ord)
REAL :: taylexp, x, sum
INTEGER :: ord, i
sum= 1.0
DO i=1,ord
sum= sum+ x**i/fact(i)
END DO
taylexp= sum
END FUNCTION taylexp
END MODULE tforexp
和
MODULE kertoma
IMPLICIT NONE
CONTAINS
FUNCTION fact(n)
INTEGER :: fact,n,y=1
DO WHILE (n>1)
y= y*n
n= n-1
END DO
fact = y
END FUNCTION fact
END MODULE kertoma
无限循环在第一次打印“f1(x)=...”之后立即开始。 所以我认为第一次调用 taylexp 函数时它会进入无限循环,但我不明白为什么。 我认为这与使用公共变量的fortran有关,但我不知道如何始终避免这种情况。 首先,我尝试在不定义 x 的情况下调用该函数,只使用“0.01*i”,我认为问题可能是该函数对虚拟索引使用了相同的名称,但显然它并没有解决问题。
【问题讨论】:
-
我不知道这是否是问题所在,但请注意
integer :: y=1可能是 doesn't do 你认为的那样。 -
taylerr在哪里使用?那为什么会在帖子里呢?
标签: fortran infinite-loop fortran95