Проблемы с реализацией - PullRequest
2 голосов
/ 20 июня 2019

У меня проблемы с реализацией do while для серии синус Тейлор. Редактирование цикла do для выполнения bb = 1, 10, 2 дает ожидаемый результат в пределах допустимой погрешности, однако при запуске требуемой реализации цикла do (do while (abs (sineseries) - точность> 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 Ответ

2 голосов
/ 20 июня 2019

Два типа циклов не делают одно и то же.

В цикле

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

у вас есть управление циклом с переменной bb. Эта переменная принимает значения 1, 3, ..., 9 на итерациях в ходе цикла.

do while не имеет этого элемента управления: вы должны повторить приращение bb вручную:

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

Как прокомментировал Пьер де Бюи, у вас также есть ошибка в условии завершения для неопределенного числа итераций. Условие первоначально оценивается как ложное, поэтому тело цикла не выполняется ни разу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...