2016-10-25 7 views
1

시리즈를 계산하고 싶지만 do..while 루프가 올바르지 않습니다. 사용자는 입력 x를 다음과 같이 요약합니다. sum = sum + x/2^n. 여기서 n은 실행 변수입니다.Infinite 시리즈 : While 루프가 무한으로 끝납니다

합계가 < = 0.00001이 될 때까지 반복해야합니다.

그러면 프로그램은 합계 값과 실행 변수의 크기를 사용자에게 알립니다. 지금까지

내 코드 : 무한 루프에

public static int n = 0; 

static void Main(string[] args) 
{ 

double x, sum = 0, e = 0.00001; 

Console.Write("input x: "); 
x = Convert.ToDouble(Console.ReadLine()); 

do 
{ 
    sum = sum + x/Math.Pow(2,n); 
    n++; 
} while (sum >= e); 

Console.WriteLine ("Sum = " + sum + ", " + n + " count"); 

} 

하지만 내 코드 결과. 당신은 어떤 아이디어가 있습니까, 어떻게 달성 할 수 있습니까?

+1

합이 항상 전자보다 더 큰오고 있기 때문이다. –

+0

합계가 항상 e – Alexan

+2

'sum'보다 커지기 때문에'e'보다 어떻게 작아 집니까? 아마 당신은 x/2^n이'e'보다 작아 질 때까지 반복하고 싶습니까? – KMoussa

답변

5

합계이 매우 작을 때까지 루핑 중입니다. 당신은해야 루프 증가가 매우 작 때까지

var delta = e; 
do 
{ 
    delta = x/Math.Pow(2,n); 
    sum = sum + delta; 
    n++; 
} while (delta >= e); 
+0

x/2^n 컴퓨팅이 잘 작동했습니다! 도와 주셔서 대단히 감사합니다. – user2448539