double a=1/6.;
int at=3;
double xs=x*x*x;
xp=x;
xn=x+xs*a;
while ((xn-xp>eps)||(xn-xp<-eps))
{
xp=xn;
xs*=x*x;
at+=2;
a*=at/(at+1);
xn+=xs*a;
}
Приближённое вычисление ArcSin (C++)
Честно говоря даже стыдно, что создавая сложные системы управления на PHP, я не могу создать несложную мат. формулу:confused:
Я бы сделал так:
Я пока что написал так:
Код:
#include <iostream>
#include <cmath>
using namespace std;
float eps_arcsin(float X, float EPS)
{
float sum = 0, a = 1;
int i;
for (i = 1; a >= EPS || a <= -EPS; i++)
{
a = a*X*X*(2*i-1)/(2*i*(2*i+1));
sum += a;
}
return sum;
}
int main()
{
float X, EPS;
cout << "Enter X: ";
cin >> X;
cout << "\nEnter EPS: ";
cin >> EPS;
cout << "EPS ArcSin: " << eps_arcsin(X, EPS) << "\n";
cout << "Standart ArcSin: " << asin(X) << "\n";
system("PAUSE");
return 0;
}
#include <cmath>
using namespace std;
float eps_arcsin(float X, float EPS)
{
float sum = 0, a = 1;
int i;
for (i = 1; a >= EPS || a <= -EPS; i++)
{
a = a*X*X*(2*i-1)/(2*i*(2*i+1));
sum += a;
}
return sum;
}
int main()
{
float X, EPS;
cout << "Enter X: ";
cin >> X;
cout << "\nEnter EPS: ";
cin >> EPS;
cout << "EPS ArcSin: " << eps_arcsin(X, EPS) << "\n";
cout << "Standart ArcSin: " << asin(X) << "\n";
system("PAUSE");
return 0;
}
Но тут ошибка, слишком уж различаются Standart и EPS ArcSin. Тем более что тут EPS вобще ни на что не влияет. Цикл почему-то совершается всегда только 1 раз... Это из-за неправильных значений sum / a / i?? Вот только что из них неправильно
Почему стыдно??? это разные вещи совершенно, web и математика. Для приближенного вычисления таких вещей обычно используют ряд Маклорена (Тейлора). Советую почитать Фихтенгольц, Мат. Анализ, Т.1, а вообще разложение такой известной функции наверняка есть в любом справочнике по высшей математике.