Вычисление sin и cos с использованием рядов Тейлора - C#
Формулировка задачи:
Нужно создать калькулятор для подсчета sin и cos с помощью рядов Тейлора.Вводить нужно значения в градусах.Точность нужна до 4 знака после запятой.Написал программу, но точность её вычислений мала.Например, ввожу значение в 90 градусов и ответ правильный, а когда ввожу значение 180 градусов, то ответ получается приблизительный.Нужна точность после 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; namespace ConsoleApplication175 { internal class Program { private static void Main(string[] args) { Console.WriteLine("Введите угол в градусах "); double k = double.Parse(Console.ReadLine()); double x = k * Math.PI / 180; double sin = Sin(x); double cos = Cos(x); sin = Math.Round(sin, 4); cos = Math.Round(cos, 4); Console.WriteLine("Синус {0}", sin); Console.WriteLine("Косинус {0}", cos); Console.ReadLine(); Console.ReadLine(); } static double Sin(double x) { const int iterations = 30; var res = 0d; var pow = x; var sign = 1; for(int i=1;i<iterations;i++) { if (i % 2 == 1) { res += pow * sign; sign *= -1; } pow *= x / (i + 1); } return res; } static double Cos(double x) { const int iterations = 30; var res = 0d; var pow = 1d; var sign = 1; for (int i = 0; i < iterations; i++) { if (i % 2 == 0) { res += pow * sign; sign *= -1; } pow *= x / (i + 1); } return res; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д