Вычисление 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;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы