На больших значениях X может ломаться, потому что там после возведения в степень получается переполнение double. Можно сделать возведение в степень с BigInteger, но тогда появится проблема деления, чтобы получить double. Console.Write("Введите X:"); var currentX = Convert.ToInt32(Console.ReadLine()); var series = TaylorSeries(currentX, 0); Console.WriteLine(series); return; double TaylorSeries(int x, int startN) { double eps = 1; int n; var previousElement = ElementForN(x, startN); var result = previousElement; for (n = 1; eps > 0; n++) { var nextElement = ElementForN(x, n); result += nextElement; eps = Math.Abs(nextElement - previousElement); previousElement = nextElement; } Console.WriteLine($"Кол-во шагов: {n}"); result *= 2; return result; } double ElementForN(int x, int n) { return Math.Pow(x - 1, 2 * n + 1) / ((2 * n + 1) * Math.Pow(x + 1, 2 * n + 1)); } CSHARP Console.Write("Введите X:"); var currentX = Convert.ToInt32(Console.ReadLine()); var series = TaylorSeries(currentX, 0); Console.WriteLine(series); return; double TaylorSeries(int x, int startN) { double eps = 1; int n; var previousElement = ElementForN(x, startN); var result = previousElement; for (n = 1; eps > 0; n++) { var nextElement = ElementForN(x, n); result += nextElement; eps = Math.Abs(nextElement - previousElement); previousElement = nextElement; } Console.WriteLine($"Кол-во шагов: {n}"); result *= 2; return result; } double ElementForN(int x, int n) { return Math.Pow(x - 1, 2 * n + 1) / ((2 * n + 1) * Math.Pow(x + 1, 2 * n + 1)); }