2016-10-25 17 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

合計は常にEより大きい来ているので。 –

+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