В чем ошибка?задание вычисление функции разложения в ряд. во внутреннем цикле значение суммы ТЕКСТ ЗАДАНИЯ
#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 вы ничего разумного не получите...
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Пишу инсталлятор, который, как принято, должен создавать ярлык на рабочем столе и группу в меню ПускНаходил в сети много вариантов одной и той...
Нужно срочно собрать Boost 1_62_0 на Windows 7 x64 SP1Нет файла corecrt