C# Calculations
Здраствуйте, только изучаю C# и выполняю арифметическое задание. (вот мой вариант решения)
/// <summary>
/// Calculate the following sum
/// 1/(1*2) - 1/(2*3) + 1/(3*4) + ... + (-1)^(n+1) / (n * (n + 1)), where n > 0.
/// </summary>
/// <param name="n">Number of elements.</param>
/// <returns>Sum of elements.</returns>
public static double GetSumTwo(int n)
{
double result = 0;
while (n != 0)
{
double first = Math.Pow(-1, n);
double second = n * (n + 1);
result = first / second;
n -= 1;
}
return result;
}
Но при выполнений тестов выходит ошибка, результат приблизительно равны, но отличаются на одну две цифры. Как можно сделать чтоб ответ был более корректным, плюс как можно возводить в степень без использования метода Math.Pow()
Expected: 0.38217893217893217d +/- 4.9406564584124654E-324d
But was: 0.39126984126984127d
Ответы (1 шт):
Вы явно проверяете решение на другом коде (в данном коде не считается сумма) и для другого n. Я ради интереса посчитал на Питоне, вы считаете всё правильно, но для n=9, а не n=10, для которого вы привели ответ, на который нужно ориентироваться.
А насчёт степени, если считать нормальным образом - с первого члена ряда, а не с последнего, то можно просто завести переменную sign, записать в неё 1 в начале, а потом на каждом шаге цикла делать sign = -sign. И никакая степень не нужна. Всё, что нам нужно - это менять знак слагаемого и это делается вот таким способом.
И цикл while тут явно не нужен вообще, используйте for, ведь у вас точно известно, какие значения переменной цикла нужно перебрать. Так будет проще.