
C/C++
Вычислить бесконечную сумму с заданной точностью, используя рекуррентные зависимости
Помогите написать программу на СИ

double x, q, t, s;
int n = 1;
scanf("%lf", &x);
s = t = x;
q = -x * x;
do {
n += 2;
t *= q / (n * (n - 1));
s += t;
} while(fabs(t) >= 1.0e-5);
printf("%.8f %.8f\n", s, sin(x));
Rustam Turdiev
Спасибо
Если уж вычисляется синус, то тут есть два подхода: 1) воспользоваться тригонометрической формулой приведения для достаточно больших по модулю аргументах синуса sin(x+2πk)=sin(x) для любого k∈ℤ, 2) наплевать на формулу приведения. Запустим следующий код и проверим что получается в обоих случаях:
#include <math.h>
#include <stdio.h>
int main()
{
const double e = 1., ε = 1e-5,
τ = 6.2831853071795865;
double x, X, y, p, q, s, sx;
for (;;)
{
printf("x = ");
scanf("%lf", &x);
X = x;
sx = sin(x);
x -= τ * (long long)(x / τ);
p = s = x;
y = - x * x;
q = e;
while (fabs(p) > ε)
{
q += 2.;
p *= y / (q * (q - e));
s += p;
}
printf("sin(x) = %.16g\n1) %.16g %.4e\n",
sx, s, s - sx);
p = s = X;
y = - X * X;
q = e;
while (fabs(p) > ε)
{
q += 2.;
p *= y / (q * (q - e));
s += p;
}
printf("2) %.16g %.4e\n", s, s - sx);
}
}
А результаты такие:
Видно, что без формулы приведения можно вычислять синус только где-то до |х|≈20..25, а дальше возникают гигантские погрешности, причём при х=800 программа вообще зависает напрочь. С формулой же приведения можно вычислять синус хоть даже при аргументе в сто миллиардов и при этом ничего, естественно, не зависает...
#include <math.h>
#include <stdio.h>
int main()
{
const double e = 1., ε = 1e-5,
τ = 6.2831853071795865;
double x, X, y, p, q, s, sx;
for (;;)
{
printf("x = ");
scanf("%lf", &x);
X = x;
sx = sin(x);
x -= τ * (long long)(x / τ);
p = s = x;
y = - x * x;
q = e;
while (fabs(p) > ε)
{
q += 2.;
p *= y / (q * (q - e));
s += p;
}
printf("sin(x) = %.16g\n1) %.16g %.4e\n",
sx, s, s - sx);
p = s = X;
y = - X * X;
q = e;
while (fabs(p) > ε)
{
q += 2.;
p *= y / (q * (q - e));
s += p;
}
printf("2) %.16g %.4e\n", s, s - sx);
}
}
А результаты такие:

Похожие вопросы
- Помогите написать программу на си
- Помогите пожалуйста написать программу на Си
- Написать программы на СИ
- Написать программу на Си, помогите!!!
- Работа со структурами. Написать программу для СИ
- Помогите плиз написать программу на Си Массив структур
- Написать программу на Си
- Помогите написать программу на языке Си
- Помогите написать программу на С
- Помогите написать программу на C++