@k4roma
Начал изучать JavaScript

Вычислить приближенное значение бесконечной суммы с точностью до e=0.0001?

Что здесь не так?
Вот условие:
24414ba016d84a9b9e1d9332a8e83f0a.PNG
#include <iostream>
#include <iomanip>
#include <cmath>
#include <math.h>
using namespace std;

int fact(int n)
{
	if (n == 0 || n == 1) return 1;
	return fact(n - 1);
}

int main()
{

	int n, x;
	double r, memb;
	n = 0; 
	r = 0;

	x = 4;

	memb = (pow(-1, n)) * (pow(x, 2 * n)) / fact(2 * n);

	do
	{
		r += memb;
		memb = (pow(-1, n)) * (pow(x, 2 * n)) / fact(2 * n);

		n++;
	} while (fabs(memb) >= 0.0001);

	cout << r << endl;

	system("pause");
}
  • Вопрос задан
  • 3460 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Факториал неверно вычисляется. В вашей функции он всегда равен 1. Ну и, кроме того, программа крайне неоптимально написана.
double eps = 0.0001;
double sum = x;
double add = 1;
int i = 1;
do {
    add = -add*x*x/i/(i+1);
    sum += add;
    i += 2;
} while (fabs(add) >= eps);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vladusch
@Vladusch
Навскидку скажу: смотрите в сторону алгоритмов компенсационного суммирования или как его называют суммирование Кэхена. Этот алгоритм позволяет добиться независимости ошибки суммирования от количества слагаемых и в таком случае максимальна ошибка будет равна ошибке представления числа с плавающей точкой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы