2014-02-08 4 views
0

В настоящее время я пишу программу для вычисления арктангенса с использованием суммы серии Тейлора. Центральная часть кода является следующее:Проверка равенства для циклов

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. Я провел довольно много времени, играя с различными конфигурациями кода и не могу понять, почему он делает то, что есть. Я все еще новичок в этой программе, поэтому любая помощь приветствуется. Извините, если этот пост неясен, я знаю, что я не включил остальную часть программы, но у меня был довольно долгий и утомительный день. Спасибо :)

+0

Обратите внимание, что '10e-6' является' 1.0E-5'. Возможно, вы захотите использовать 'break;' после установки 's = i;', чтобы вы больше не обходили цикл. Как бы то ни было, вы попадаете в 'i == n-1', а дельта достаточно мала, чтобы снова установить' s = i; ', и поэтому вы видите, что видите. –

+0

Вы, по-видимому, хотите закончить цикл, если ваше условие 'if' истинно, поэтому вы должны поместить' break' после 's = i'. – ooga

+0

Это теперь работает, спасибо! – user2591837

ответ

1

Вместо этого вы можете использовать цикл while. Условие выхода из цикла то время как может быть:

while (fabs(sum-firstval)>delta) 

В противном случае, другие предложения (используя перерыв после переменной s было назначено значение i) работать тоже.

Смежные вопросы