我被分配了以下问题:
创建Fortran程序,该程序能够读取[0-360]检查有效范围(不是类型)的程度,并且能够从以下等式计算并打印cos(x)
,其中{{ 1}}是弧度的:
x
作为收敛标准假设cos(x)=1-x^2/2! + x^4/4!-x^6/6!+x^8/8!-...
使用两次连续重复之间的绝对误差(我认为这意味着做了)。
对于10^(-5)
的计算,应使用最大可能的整数。最后,应在屏幕上打印重复的总数。
所以我的代码是这样的:
!
我得到45度(或 program ex6_pr2
implicit none
!Variables and Constants
integer::i
real*8::fact,fact2 !fact=factorial
real,parameter::pi=3.14159265
double precision::degree,radiants,cosradiants,s,oldcosradiants,difference !degree,radiants=angle
print*,'This program reads and calculates an angle`s co-sinus'
print*,'Please input the degrees of the angle'
read*,degree
do while(degree<0 .or. degree>360) !number range
read*,degree
print*,'Error input degree'
cycle
end do
radiants=(degree*pi/180)
fact=1
fact2=1
s=0
cosradiants=0
!repeat structure
do i=2,200,1
fact=fact*i
fact2=fact2*(i+2)
oldcosradiants=cosradiants
cosradiants=(-(radiants)**i/fact)+(((radiants)**(i+2))/fact2)
difference=cosradiants-oldcosradiants
s=s+cosradiants
if(abs(difference)<1e-5) exit
end do
!Printing results
print*,s+1.
end program
)等角度的正确结果,而其他角度为90度或180度。
我已经检查了我的因子,我认为错误是隐藏的(至少对我而言)。
我创建了另一个代码,由于以下错误似乎无法运行:FUNCTION名称,(PROJECT2_EX6的结果~FACT),用于不期望的地方,可能缺少&#39;()&#39;
pi/4
答案 0 :(得分:2)
虽然这是你的作业,但我会在这里帮助你。首先是错误的是你需要用
代替的阶乘 fact = 1
do j = 1,i
fact = fact*j
enddo
第二,如果你让你的do循环完成这项工作就更容易了,所以把它作为
运行do i=4,200,2
和预定义的cosradians在do loob之外
cosradiants = 1-radiants**2/2
另外,您需要考虑使用
在循环中执行的更改符号 sign = sign*(-1)
并在循环
之前使用sign = 1
启动它
在循环中然后
cosradiants= cosradiants+sign*radiants**i/fact
如果你已经包含了这些东西,它应该可以工作(至少我的代码是这样的)