Fortran 代码中的循环不遵守循环规则
A loop in fortran code doesn't obey loop rules
首先,我是 Fortran 的新手。我试图在 0.0000005 的公差范围内找到 1/e 的值。我使用了 1/e 的求和表示,即 (epsilon) n 从零到无穷大 ((-1)^n)/n!。我从n=2开始,当值为1/n!小于我的公差,程序将停止并打印计算出的总值。但是我的程序只转到 n=3 并且只打印 1/3 的值!这是 1.666666。
!程序被编辑。编辑后的表格计算出我 wanted.Before 外部 while 的条件是 (num3<5e-8) 并且它没有增加 n。现在n增加问题解决了。
program Ecalculator
implicit none
integer :: mult,num1,n,num4,num5
real :: summ,num3,fact
mult=1
n=2.0
fact=1.0
summ=0.0
DO WHiLE(n<13)
fact=n
num1=n-1
DO WHiLE(num1>0)
fact=fact*num1;
num1=num1-1;
END DO
fact=fact*mult;
num3=1.0/fact;
mult=mult*(-1);
summ=summ+num3;
n=n+1;
END DO
print *, summ
read *, num5
end program Ecalculator
看起来阶乘计算不正确:行 fact=num4*num1
可能没有按照您的要求执行,因为 num4
只是被分配为 n
并且从始至终都没有改变内循环。我不认为你需要两个变量 num4
和 fact
;你可以将它们组合成一个变量。
首先,我是 Fortran 的新手。我试图在 0.0000005 的公差范围内找到 1/e 的值。我使用了 1/e 的求和表示,即 (epsilon) n 从零到无穷大 ((-1)^n)/n!。我从n=2开始,当值为1/n!小于我的公差,程序将停止并打印计算出的总值。但是我的程序只转到 n=3 并且只打印 1/3 的值!这是 1.666666。 !程序被编辑。编辑后的表格计算出我 wanted.Before 外部 while 的条件是 (num3<5e-8) 并且它没有增加 n。现在n增加问题解决了。
program Ecalculator
implicit none
integer :: mult,num1,n,num4,num5
real :: summ,num3,fact
mult=1
n=2.0
fact=1.0
summ=0.0
DO WHiLE(n<13)
fact=n
num1=n-1
DO WHiLE(num1>0)
fact=fact*num1;
num1=num1-1;
END DO
fact=fact*mult;
num3=1.0/fact;
mult=mult*(-1);
summ=summ+num3;
n=n+1;
END DO
print *, summ
read *, num5
end program Ecalculator
看起来阶乘计算不正确:行 fact=num4*num1
可能没有按照您的要求执行,因为 num4
只是被分配为 n
并且从始至终都没有改变内循环。我不认为你需要两个变量 num4
和 fact
;你可以将它们组合成一个变量。