2016-10-25 4 views
1

Ich möchte eine Serie berechnen, aber ich bekomme meine do..while-Schleife richtig. Der Benutzer gibt den Eingang x ein, der dann folgendermaßen summiert wird: sum = sum + x/2^n, wobei n die laufende Variable ist.Infinite Series: While-Schleife endet im Unendlichen

Dies muss wiederholt werden, bis die Summe < = 0,00001 ist.

Dann benachrichtigt das Programm den Benutzer über den Wert der Summe und wie groß die laufende Variable ist.

Mein Code so weit:

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"); 

} 

Aber mein Code führt zu einer Endlosschleife. Hast du irgendwelche Ideen, wie ich es erreichen könnte?

+1

weil Summe immer größer als e kommen. –

+0

weil summe immer größer als e – Alexan

+2

'summe' steigt, wie wird es jemals kleiner als' e'? Vielleicht möchten Sie eine Schleife machen, bis x/2^n kleiner als "e" wird? – KMoussa

Antwort

5

Sie schleifen, bis die Summe sehr klein ist; Sie sollen Schleife, bis der Zuwachs sehr klein ist:

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

Berechnung x/2^n in einer eigenen Variablen hat gut funktioniert! Vielen Dank für die Hilfe – user2448539