Бесконечная серия: цикл while заканчивается бесконечностью

Я хочу вычислить серию, но у меня нет правильного цикла do.. while. Пользователь вводит x, который затем суммируется следующим образом: sum = sum + x / 2 ^ n, где n - текущая переменная.

Это должно быть зациклено, пока сумма не будет равна 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");

}

Но мой код приводит к бесконечному циклу. У вас есть идеи, как мне этого добиться?


person user2448539    schedule 25.10.2016    source источник
comment
потому что сумма всегда оказывается больше, чем e.   -  person vivek nuna    schedule 26.10.2016
comment
потому что сумма всегда больше, чем е   -  person Alexan    schedule 26.10.2016
comment
sum увеличивается, как оно станет меньше e? Возможно, вы хотите зацикливаться, пока x / 2 ^ n не станет меньше e?   -  person KMoussa    schedule 26.10.2016
comment
Вы можете использовать эту старую математическую формулу также sum = a / (1- r)   -  person vivek nuna    schedule 26.10.2016


Ответы (1)


Вы повторяете цикл до тех пор, пока сумма не станет очень маленькой; вы должны зацикливаться, пока приращение не станет очень маленьким:

var delta = e;
do
{
  delta = x / Math.Pow(2,n);
  sum = sum + delta;
  n++;
} while (delta >= e);
person D Stanley    schedule 25.10.2016
comment
вычисление x / 2 ^ n в собственной переменной работало хорошо! огромное спасибо за помощь - person user2448539; 28.10.2016