• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Вычислить сумму ряда (приближенное значение функции Sin)

  • Автор темы maryfly009
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

maryfly009

Здравствуйте уважаемые программисты! Помогите пожалуйста найти ошибку в программе.
Код:
//Подключение библиотеки стандартного ввода и вывода
#include<stdio.h>
//Подключение библиотеки математических функций
#include<math.h>

//Функция вычисления факториала
double Factorial(unsigned n)
{
//Объявление и инициализация переменных функции
double p=1.0;
unsigned i = 2;
//Цикл вычисления значения факториала числа
for(;i<=n;i++) p*=(double)i;
//Возврат полученного значения
return p;
}

int main()
{
//Объявление и инициализация
//переменных программы
double sum=0, i=0, t=1, x, eps;

//Приглашение к вводу x
printf("x = ");
//Ввод значения x
scanf("%lf",&x);

//Приглашение к вводу eps
printf("eps = ");
//Ввод значения eps
scanf("%lf",&eps);

//Цикл вычисления суммы ряда с заданной точностью
do
{
t *= pow((-1), i) * ((pow(x, 2*i+1)) / (Factorial(2 * i + 1)));
sum += t;
i++;
}while( fabs(t) >= eps );

//Вывод значения суммы 
printf("sum = %5.4lf\n", sum);
//Вывод значения библиотечной функции sin 
printf("sin = %5.4lf\n", sin(x));

return 0;
}

при x=1
sum = 0.8319
sin = 0.8415
вроде значения приближенно равны

а при x = 5
sum = -64289.9875
sin = -0.9589
существенная разница

подскажите в чём проблема
 

Вложения

  • ______________.jpg
    ______________.jpg
    17 КБ · Просмотры: 599
H

hosm

мне лично это не понравилось: t *=
запросто могу ошибаться)
 
M

maryfly009

спасибо, действительно в этом была ошибка
 
Z

zeus

А я бы сделал бы так
C++:
#include <stdio.h>
#include <math.h>

double calc_sin(double x, double eps)
{
double res = x, t = 0.0;
int i = 1;

while (abs(x-t) >= eps)
{
t = res;
res *= x*x / (2*i) / (2*i + 1);
} // while

return res;
} // calc_sin

int main(void)
{
double x, eps;

printf("x = ");
scanf("%lf",&x); // Ввод значения x

printf("eps = ");
scanf("%lf",&eps); // Ввод значения eps

printf("calc_sin = %5.4lf\n", calc_sin(x, eps)); // Вывод значение синуса
printf("sin = %5.4lf\n", sin(x)); //Вывод значения библиотечной функции sin 

return 0;
} // main
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!