首页 > 解决方案 > 执行时的问题

问题描述

我在执行正弦泰勒级数时遇到问题。将 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

标签: fortran

解决方案


这两种类型的循环没有做同样的事情。

在循环

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 评论的那样,无限迭代计数的终止条件也有错误。该条件最初评估为假,因此循环体甚至不会执行一次。


推荐阅读