我在执行正弦泰勒系列的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
答案 0 :(得分:2)
这两种循环的作用不同。
循环中
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所说,无限迭代计数的终止条件也有错误。该条件最初的计算结果为false,因此循环体甚至不会执行一次。