a[0]=x
a[n]=(-1)^x*x^(2n+1)/(2n+1)!
a[n-1]=(-1)^(x-1)*x^(2n-1)/(2n-1)!
a[n]/a[n-1]=-x^2/((2n)(2n+1))
#include <iostream>
#include <locale>
#include <limits>
#include <valarray>
#include <cmath>
using namespace std;
// Вычисляет синус
double msin(double x)
{
// Приводим к -π/2..π/2
// Для наших скромных нужд хватит и такого приведения
int n=floor(abs(x)/M_PI);
x-=(x<0?-1:1)*n*M_PI;
x=n&1?-x:x;
if(abs(x)>M_PI_2)
{
x=(x<0?-M_PI:M_PI)-x;
}
// Считаем
double res=0,u=x;
unsigned int cnt=0;
do
{
res+=u;
cnt+=2;
u=-u*x*x/cnt/(cnt+1);
}
while(abs(u)>numeric_limits<double>::epsilon());
return res;
}
int main()
{
locale::global(locale(""));
double x;
while (true)
{
cout << "Введите x:";
cin >> x;
if (cin.fail())
{
cout << "Ошибка ввода" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
else
{
break;
}
}
cout.precision(18);
cout<<"Наша функция:"<<msin(x)<<endl
<<"Стандартная функция:"<<sin(x)<<endl;
return 0;
}
Введите x:-111
Наша функция:0.864551448610612061
Стандартная функция:0.864551448610608286
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.