Нахождение sin и cos с использованием рядов Тейлора - C#
Формулировка задачи:
Нужно создать калькулятор для подсчета sin и cos с помощью рядов Тейлора.Вводить нужно значения в градусах.Точность нужна до 4 знака после запятой.Написал программу, но точность её вычислений мала.Нужна точность после 4 знака после запятой.Помогите пожалуйста как-то улучшить программу чтобы она считала точнее.Или предложите другой алгоритм нахождения sin и cos.Заранее благодарю.
static int Factorial (int numb)
{
int res = 1;
for (int i = numb; i > 1; i--)
res *= i;
return res;
}
static void Main(string[] args)
{
Console.WriteLine("Введите угол в градусах ");
double k = double.Parse(Console.ReadLine());
double x=k*Math.PI/180;
double sin = x - Math.Pow(x, 3) / Factorial(3) + Math.Pow(x, 5) / Factorial(5) - Math.Pow(x, 7) / Factorial(7) + Math.Pow(x, 9) / Factorial(9) - Math.Pow(x, 11) / Factorial(11) + Math.Pow(x, 13) / Factorial(13);
double cos = 1 - Math.Pow(x, 2) / Factorial(2) + Math.Pow(x, 4) / Factorial(4) - Math.Pow(x, 6) / Factorial(6) + Math.Pow(x, 8) / Factorial(8) - Math.Pow(x, 10) / Factorial(10) + Math.Pow(x, 12) / Factorial(12);
sin = Math.Round(sin, 4);
cos = Math.Round(cos, 4);
Console.WriteLine("Синус {0}", sin);
Console.WriteLine("Косинус {0}",cos);
Console.ReadLine();Решение задачи: «Нахождение sin и cos с использованием рядов Тейлора»
textual
Листинг программы
using System;
class Program
{
static void Main()
{
const double x = Math.PI/4;
Console.WriteLine("Mysin = {0}\tMath.Sin = {1}", MySin(x, 0.001), Math.Sin(x));
}
private static double MySin(double x, double epsilon)
{
double result = 0, lastresult = double.NegativeInfinity, a = x;
for (int i = 0; Math.Abs(result - lastresult) > epsilon; i++)
{
lastresult = result;
result += a;
a *= -x*x/(2*(2*i + 3)*(i + 1));
}
return result;
}
}