Исправить функцию для подсчета большого факториала - C#
Формулировка задачи:
Помогите написать функцию для подсчета большого факториала,
вот код программы
А вот проверка максимального значения факториала max=170.
Я смог только до 170 дальше бесконечность но из за этого не работает ряд Тейлора как надо.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication40
{
class Program
{
static void Main(string[] args)
{
Console.Clear();
int c = 0;
double y = 0;
double x1 = 0;
double x2 = 0;
double dx = 0;
double e = 0;
double d = 0;
double f = 0;
int l = 0;
bool u = true;
double bufy = 0;
bool o = true;
while (o)
{
try
{
o = false;
Console.Write("Введите х начальное ");
x1 = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите х конечное ");
x2 = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите шаг ");
dx = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите точность ");
e = Convert.ToDouble(Console.ReadLine());
}
catch
{
o = true;
Console.Clear();
Console.WriteLine("Ошибка ввода");
}
}
Console.WriteLine("Таблица значений");
Console.WriteLine("---------------------------");
Console.WriteLine(" x | y | k ");
Console.WriteLine("---------------------------");
for (int i = 1; x1 <= x2; i++)
{
c = 0;
l = 1;
y = 0;
d = 0;
f = 0;
u = true;
for (int n = 0; u; n++)
{
f = fac(n);
bufy = (Math.Pow((-1), n) * (Math.Pow(x1, 2 * n))) / f;
y = y + bufy;
if (Math.Abs(bufy) < e) u = false;
d = bufy;
c++;
//f = f * c;
//l = l * -1;
y = Math.Round(y, 7);
// Console.WriteLine(" n={0}, fac={1}",n, fac(n));
}
Console.Write("|{0,5} ", x1);
Console.Write("|{0,13}|", y);
Console.WriteLine(" {0,3}", c);
x1 = x1 + dx;
}
Console.ReadLine();
}
private static double fac(int n)
{
if (n <= 1) return (1);
else return (n * fac(n - 1));
}
}
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication51
{
class Program
{
private static double fac(int n)
{
if (n <= 1) return (1);
else return (n * fac(n - 1));
}
static void Main(string[] args)
{
Console.WriteLine("Введите n=");
double p = double.Parse(Console.ReadLine());
for (int n = 0; n < p; n++)
{
// if (n = false)
// break;
Console.WriteLine("n={0},fac={1}", n, fac(n));
}
Console.ReadLine();
}
}
}Решение задачи: «Исправить функцию для подсчета большого факториала»
textual
Листинг программы
double current = 1;
int n = 0;
double sum = 1;
int sign = 1;
for (/*условие цикла*/)
{
n++;
sign = -1 * sign; //меняем знак
current = current * x * x; //домножаем на x^2
current = current / n; //делим на номер счетчика(вот и весь факториал)
current = current * sign;
sum = sum + current;
}