fortran - 执行时的问题
问题描述
我在执行正弦泰勒级数时遇到问题。将 do 循环编辑为 do bb = 1, 10 , 2 会在误差范围内很好地给出预期结果,但是在运行所需的 do 循环实现时(do while(abs(sineseries) - accuracy > 0),将始终给出一个等于 1 的答案。所以我将可能性缩小到 do while 循环实现有问题。
program taylor
implicit none
real :: x
real :: sineseries, nfactsine
real, parameter :: accuracy = 1.e-10
integer :: signum, bb
nfactsine = 1
signum = 1
write(*,*) "Write your input value"
read(*,*) x
sineseries = 0
do while(abs(sineseries) - accuracy > 0)
sineseries = sineseries + (signum*x**bb)/nfactsine
nfactsine = nfactsine*(bb+1)*(bb+2)
signum = -signum
end do
write(*,*) sineseries, sin(x)
end program taylor
解决方案
这两种类型的循环没有做同样的事情。
在循环
do bb=1, 10, 2
...
end do
你有变量的循环控制bb
。随着循环的进行,该变量在迭代时采用值1
, 3
, ..., 。9
do while
没有此控制:您必须手动复制增量bb
:
bb=1
do while (...)
...
bb=bb+2
end do
正如 Pierre de Buyl 评论的那样,无限迭代计数的终止条件也有错误。该条件最初评估为假,因此循环体甚至不会执行一次。
推荐阅读
- python - WxPython 退出按钮并不总是有效
- java - 假阳性和假阴性
- google-container-registry - 从 gcr.io 拉取时权限失败
- python - 捕获 UnboundLocalError 异常
- react-native - 在android react native上更改导航栏颜色(仅在单个页面上,而不是通过应用程序)
- python - 数据框列中两个值的平均值
- javascript - 将元数据添加到 HTML5 音频流
- reactjs - 三元表达式不更新 jsx 模板
- asp.net - 正则表达式匹配字符串中任意位置的多个字符串
- quarkus - 调查 Quarkus 1.2.Final 和 Kogito 0.7.1 项目有什么问题