В чем ошибка?задание вычисление функции разложения в ряд. во внутреннем цикле значение суммы ТЕКСТ ЗАДАНИЯ
#include<cmath>
#include<iostream>
using namespace std;
int factorial(int n)
{
int fact = 1;
for (int i = 1; i <= n; i++)
{
fact *= i;
}
return fact;
}
int main()
{
int i, n;
double x, xx, sum = 0.0, summa = 0.0, eps = 0.25;
cin >> n;
for (i = 0; i < n; i++)
{
cin >> x;
xx = (-1) * x * x + 1;
sum = eps + 1;
if (abs(sum) > eps)
{
sum = pow(xx, i) / factorial(i);
summa += sum;
}
cout << "Значение приближенное по eps:" << ' ' << summa << ' ' <<
endl;
cout << "Значение без eps:" << ' ' << pow(M_E, xx) << endl;
}
}
входные данные n=5 х1=-2.7 х2=-0.1 х3=2.9 х4=17.9 х5=117.0
if(abs(sum)>eps)
замените на
while(abs(sum)<eps)
с соответствующим изменением sum
перед началом цикла, и уберите цикл for
. Впрочем, у вас наворочено гораздо больше, чем одна ошибка. Что вы, собственно, хотите вычислять? По исходнику - вроде бы
Так? Словом, дайте четкое ТЗ, тогда будет проще набросать вам нормальный код, чем исправлять это...
Ну, раз внесено исправление ТЗ...
const double eps = 1e-12;
int main(int argc, const char * argv[])
{
int N;
cout << "Number of trials? ";
cin >> N;
for(int n = 0; n < N; ++n)
{
cout << "Trial " << (n+1) << ". x = ";
double x;
cin >> x;
cout << "x = " << x;
x = 1.0 - x*x;
cout << "; exp(1-x^2) = " << exp(x);
int i = 1;
double term = 1.0, sum = 1.0;
while(abs(term) > eps)
{
sum += term *= x/i++;
}
cout << "; series = " << sum << "\n\n";
}
}
Только учтите, что реально это будет вычисляться ну, где-то при |x|<=4
. Дальше этот метод просто не будет работать - из-за того, что члены сначала будут крепко расти, а уж потом уменьшаться, так что погрешность вычислений сведет все на нет. В лучшем случае, если поменять порядок вычислений и пытаться суммировать с учетом всех нюансов - ну, может, еще немного и получится поднять диапазон. Но ни для запрашиваемых вами 17.9, ни тем более для 117 вы ничего разумного не получите...
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пишу инсталлятор, который, как принято, должен создавать ярлык на рабочем столе и группу в меню ПускНаходил в сети много вариантов одной и той...
Нужно срочно собрать Boost 1_62_0 на Windows 7 x64 SP1Нет файла corecrt