Ряд Тейлора рекурсией - C#
Формулировка задачи:
Добрый вечер. При написание рекурсивного вычисления значения функции с помощью ряда Тейлора возникла следующая проблема: при достаточно большом шаге - 0,1; 0,2 -очень сильно страдает точность вычисления, при маленьком шаге, к примеру - 0,001, всё нормально. Помогите, пожалуйста, исправить ошибку.
class Program { const double e = 0.00000001; public static double step(double ch, double st) { if (st == 0) return (1); else if (st < 0) return (1 / step(ch, -st)); else return (ch * step(ch, st - 1)); } public static double arth(double x, int n) { if (n == 0) return x; else return (step(x, 2 * n + 1) / (2 * n + 1)) + arth(x, n - 1); } static void Main(string[] args) { double x, sum=0; int count = 0; Console.Write("Начальное значение = "); double dnach = Convert.ToDouble(Console.ReadLine()); Console.Write("Конечное значение = "); double dkon = Convert.ToDouble(Console.ReadLine()); Console.Write("Шаг = "); double dx = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("+------------+------------+------------+"); Console.WriteLine("| x | Arth(x) | Проверка |"); Console.WriteLine("+------------+------------+------------+------------+"); for (x = dnach; x <= dkon; x = x + dx) { if (Math.Abs(x) < 1) Console.WriteLine(" {0,8:F5} | {1,8:F5} | {2,8:F5} |", x, arth(x, count), 0.5 * Math.Log((1 + x) / (1 - x))); count++; } Console.WriteLine("+------------+------------+------------+------------+"); Console.ReadLine(); } }
Решение задачи: «Ряд Тейлора рекурсией»
textual
Листинг программы
else if (st < 0) return (1d / step(ch, -st));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д