Ряд Тейлора рекурсией - 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));