实施时的问题

时间:2019-06-20 00:12:58

标签: fortran

我在执行正弦泰勒系列的do while时遇到问题。将do循环编辑为bb = 1,10,2可以在误差范围内提供预期结果,但是在运行do循环的所需实现时(do while(abs(sineseries)-precision> 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

1 个答案:

答案 0 :(得分:2)

这两种循环的作用不同。

循环中

do bb=1, 10, 2
  ...
end do

您可以使用变量bb进行循环控制。随着循环的进行,此变量在迭代时采用值13,...,9

do while没有此控件:您必须手动复制bb的增量:

bb=1
do while (...)
  ...
  bb=bb+2
end do

正如Pierre de Buyl所说,无限迭代计数的终止条件也有错误。该条件最初的计算结果为false,因此循环体甚至不会执行一次。