C/C++

Вычислить сумму бесконечного ряда c точностью e=0.0001

Как реализовать эту задачу на языке c++?
Проверь вычисления и подправь если что
Dmitrii Gladun
Dmitrii Gladun
81 123
Лучший ответ
#include "iostream"
#include "cmath"
using namespace std;
int main(){
double s=1,p=1,x,e=1e-4; int i=-1; cout<<"x (|x|<1): "; cin>>x;
while(abs(p)>e)s+=p*=x*x*++++i/(i+1);
cout<<s<<", exact="<<1/sqrt(1-x*x)<< endl;}
Борис Свищёв
Борис Свищёв
82 778
Чтобы получить требуемую точность ε=1e-4, можно просто сумму ряда вычислять с некоторым запасом как, например, у меня вычисляется функция S(x) до тех пор, пока очередное слагаемое бесконечного ряда не станет меньше ε по крайней мере в десять раз, хотя, вообще-то, такой подход может оказаться тупиковым при |х| очень близких к единице.
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double f(double x)
{
return 1. / sqrt(1. - x * x);
}
double S(double x)
{
double y = x * x, s = 1., p = s, q = 0.;
while (p > 1e-5)
{
q += 1.;
p *= y * (1. - 0.5 / q);
s += p;
}
return s;
}
int main()
{
double h = 0.1, i, x, Sx, fx;
for (i = -9; i < 10; i++)
{
x = i * h;
Sx = S(x);
fx = f(x);
cout << setprecision(1) << fixed
<< setw(4) << x << setprecision(16)
<< fixed << setw(20) << Sx << setw(20)
<< fx << setprecision(8) << setw(12) <<
Sx - fx << endl;
}
}
wps=0.0001;
cin<eps)
{
sum+=mem;
f*=double(i)/double(i+1);
xx*=x;
mem=f*xx;
}

примерно так...
PQ
Paul Quast
31 634