Проблема в том что при вычислении не хватает памяти и считает только до 7 символов после запятой, нужно чтобы считало хотя бы 10 символов после
вот само задание
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
double sum(double alpha) {
double total_sum = 0; // сумма с новым слагаемым
int denominator; // знаменатель a_i
double numerator = 1; // числитель a_i
double a_i; // a_i
for (int i = 1; true; i++) {
denominator = (1 + i*i*i)*(1 + i*i*i);
numerator *= (-1);
a_i = i * numerator / denominator;
cout << "a_i " << a_i << endl;
total_sum += a_i;
if (abs(a_i) <= alpha) { // первое отброшенное слагаемое
return total_sum;
}
}
}
int main() {
setlocale(LC_ALL, "Russian");
double alpha = 0.00000001; // Требуемая точность
double exact_value = -0.2284153977; // Значение суммы ряда до 10 знака после запятой
double Sum = sum(alpha);
cout << "Значение суммы ряда: " << exact_value << endl;
cout << "Приближенное значение суммы ряда: \t" << Sum << endl;
return 0;
}
Вы бы не ссылочку неработающую давали, а не поленились пояснить, что надо. А ваши "7 символов" - вангую - потому что вы при выводе просто не указали требуемую точность, вот и получили умолчание: надо
cout << setprecision(10) << exact_value << endl;
А, увас все хуже - denominator делать целочисленным категорически нельзя! Переполнение же!
double sum(double eps)
{
double total_sum = 0; // сумма с новым слагаемым
double denominator; // знаменатель a_i
double numerator = 1; // числитель a_i
double a_i; // a_i
for (int i = 1; ;i++)
{
denominator = (1.0 + double(i)*i*i);
numerator *= (-1);
a_i = i * numerator / denominator / denominator;
cout << "a_i " << a_i << endl;
total_sum += a_i;
if (abs(a_i) <= eps) { // первое отброшенное слагаемое
return total_sum;
}
}
}
int main() {
setlocale(LC_ALL, "Russian");
double alpha = 0.000000001; // Требуемая точность
double exact_value = -0.2284153977; // Значение суммы ряда до 10 знака после запятой
double Sum = sum(alpha);
cout << "Значение суммы ряда: " << setprecision(10) << exact_value << endl;
cout << "Приближенное значение суммы ряда: \t" << setprecision(10) << Sum << endl;
return 0;
}
Вот так, примерно... Рекуррентность вам тут абсолютно не нужна и абсолютно ни при чем.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости