2016-10-25 2 views
1

Je veux calculer une série, mais je ne reçois pas ma boucle do..while correcte. L'utilisateur crée l'entrée x, qui se résume comme suit: sum = somme + x/2^n, où n est la variable courante.Infinite Series: While boucle se termine à l'infini

Ceci doit être bouclé, jusqu'à la somme < = 0.00001. Ensuite, le programme notifiera à l'utilisateur la valeur de la somme et la taille de la variable en cours d'exécution.

Mon code à ce jour:

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

} 

Mais mes résultats de code dans une boucle infinie. Avez-vous des idées, comment je pourrais y arriver?

+1

parce que la somme est toujours à venir supérieur e. –

+0

parce que la somme toujours plus grande que e – Alexan

+2

'somme' augmente, comment sera-t-il jamais plus petit que' e'? Peut-être voulez-vous faire une boucle jusqu'à ce que x/2^n soit inférieur à 'e'? – KMoussa

Répondre

5

Vous faites une boucle jusqu'à ce que la somme soit très petite; vous devriez boucle jusqu'à ce que l'incrément est très faible:

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

calculer x/2^n dans une propre variable a bien fonctionné! Merci beaucoup pour l'aide – user2448539