В настоящее время я пишу программу для вычисления арктангенса с использованием суммы серии Тейлора. Центральная часть кода является следующее:Проверка равенства для циклов
for(int i=0;i<n;i++)
{
firstval=sum; //sum=0
sum=sum+sumterm(x,i); //calculate the sum
if(fabs(sum-firstval)<delta) //delta=10e-6
{
s=i;
}
else s=0;
}
Как я думаю, что этот код работает: «сумма» инициализируется в 0, что означает, что «firstval» как хорошо. Затем программа вычисляет значение ряда Тейлора для определенного значения i и добавляет его к сумме. Затем, когда «сумма» и «первый» различаются, величина их разности может быть вычислена - по мере прохождения цикла firstval является предыдущим значением суммы, а затем в цикле сумма становится ее следующим членом. Тогда, когда разница между ними достаточно мала и условие согласовано, значение i, для которого это произошло, сохраняется в целое число s, которое в противном случае равно 0.
Однако программа в настоящее время производит только 0, или говорит, что сумма только сходится при n-1. Я провел довольно много времени, играя с различными конфигурациями кода и не могу понять, почему он делает то, что есть. Я все еще новичок в этой программе, поэтому любая помощь приветствуется. Извините, если этот пост неясен, я знаю, что я не включил остальную часть программы, но у меня был довольно долгий и утомительный день. Спасибо :)
Обратите внимание, что '10e-6' является' 1.0E-5'. Возможно, вы захотите использовать 'break;' после установки 's = i;', чтобы вы больше не обходили цикл. Как бы то ни было, вы попадаете в 'i == n-1', а дельта достаточно мала, чтобы снова установить' s = i; ', и поэтому вы видите, что видите. –
Вы, по-видимому, хотите закончить цикл, если ваше условие 'if' истинно, поэтому вы должны поместить' break' после 's = i'. – ooga
Это теперь работает, спасибо! – user2591837