2014-02-08 6 views
0

현재 Taylor Series 합계를 사용하여 아크 탄젠트를 계산하는 프로그램을 작성하고 있습니다. 이 코드가 작동 생각하는 방법for 루프에서의 동등 테스트

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; 
} 

은 : '합' 'firstval가'뿐만 아니라 것을 의미 0으로 초기화되는 코드의 중심 부분은 다음과 같다. 그런 다음 프로그램은 i의 특정 값에 대한 Taylor 계열 값을 계산하여 합계에 더합니다. 'sum'과 'firstval'이 다르면 그 차이의 크기를 계산할 수 있습니다. 루프가 진행됨에 따라 firstval은 합계의 이전 값이고, 루프에서는 sum이 다음 기간이됩니다. 그런 다음 이들 사이의 차이가 충분히 작고 조건이 일치하면 i의 값은 정수 s로 저장되며 그 이외의 경우 0으로 저장됩니다.

그러나 프로그램은 현재 0, 그 합이 n-1로만 수렴했다고 말한다. 나는 코드의 다른 구성으로 놀면서 꽤 많은 시간을 보냈고 왜 그것이 무엇을하는지 이해할 수 없다. 나는 아직이 프로그래밍에 초보자이므로 어떤 도움도 환영합니다. 죄송 합니다이 게시물이 명확하지 않은 경우, 나는 그 프로그램의 나머지 부분을 포함하지 않은 것을 알고 있지만, 꽤 길고 피곤한 하루를 보냈습니다. 고마워요 :)

+0

'10e-6'은 '1.0E-5'입니다. 's = i;'를 설정 한 후에'break;'를 사용하여 루프를 다시 돌지 않도록 할 수 있습니다. 그것이 그렇듯이, 당신은'i == n-1'에 도달하고 델타는's = i;'를 다시 설정할만큼 작기 때문에 여러분이 보는 것을 보게됩니다. –

+0

'if' 조건이 참이면 루프를 끝내기를 원할 것입니다. 그래서's = i' 다음에'break'를 써야합니다. – ooga

+0

이제 작동합니다. 감사합니다. – user2591837

답변

1

대신 while 루프를 사용할 수 있습니다. while 루프를 종료 할 수있는 조건이 될 수있다 :

while (fabs(sum-firstval)>delta) 

그렇지 않으면, 다른 제안 (i의 변수 s 후 휴식을 사용하여 할당 된 값)도 작동합니다.