C/C++

Программирование С++ Решение поставленной задачи

Добрый день, несколько часов уже пытаюсь решить данную задачу на языке С++. Может тут есть знатоки, которые помогут написать код для решения этого задания?
В методе Симпсона ошибка ε~h⁴, где шаг интегрирования h=(b-a)/n - это длина отрезка интегрирования, делённая на количество интервалов, поэтому целесообразно количество интервалов брать порядка 1/⁴√ε.
sin(x)•cos(x) - это половина удвоенного синуса
Точное значение интеграла:
I=0,1853760679884347837248...
Поэтому запускаем проверочную программу:
 #include  
#include

using namespace std;

double Simpson(double (*f)(double),
double a, double b, double eps)
{
double i, n = (int)((b - a) / sqrt(sqrt(eps))),
h = (b - a) / n, hp = h * 0.5, u = f(b - hp), v = 0., x;
for (i = 1.; i < n; i += 1.)
{ x = a + i * h; u += f(x - hp); v += f(x); }
return (f(a) + f(b) + 4. * u + 2. * v) * h / 6.;
}

double f(double x)
{ return 0.5 * sin(2. * x) / (1. + x * (1. + x)); }

int main()
{
cout.precision(16);
double a, b, eps, I, S = 0.1853760679884347837;
while (true)
{
cout > eps;
I = Simpson(f, 0., 1., eps);
cout
ТN
Тоd Neze Mnoе Котэ
66 572
Лучший ответ
 double func(double x) { return sin(x) * cos(x) / (x * x + x + 1); }

double simpson(double (*f)(double), double a, double b, double e) {
double s = 0.0, s0, h = b - a;
double f0 = f(a) + f(b), f2 = 0.0;
do {
double f4 = 0.0;
for (double x = a + h / 2.0; x < b; x += h) { f4 += f(x); }
s0 = s;
s = (f0 + 2.0 * f2 + 4.0 * f4) * (h /= 2.0) / 3.0;
f2 += f4;
} while (fabs(s - s0) >= e);
return s;
}

int main(void) {
double eps;
cin >> eps; // вводим заданную точность
cout
Scorpion
Scorpion
70 827