Во входном потоке задано три вещественных числа a (a > 0), b (b < 0), x (-1 < x < 1). Значения исходных данных подобраны так, что выражение имеет смысл. например, 2.4 -4.2 0.6
В выходной поток вывести единственное вещественное число с точностью три знака после запятой. например, 2.425
Написал код, для значений из примера работает верно, но если x поменять на 0.5, то выводит ошибку (-nan).
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
double a,b,x,p,sum=0;
cin >> a >> b >> x;
if ((1.2+8*x)<105)
{
for (double m=(8*x+1.2);m<=105.0;m++)
{
sum+=(pow((-1),m)*m+a)/(m*(m+1));
}
}
p=(x-b)/(a+b);
p=pow(p,3);
p=sin(p)/cos(p);
p=pow(p,3)*sum;
p=p+(pow((x+pow(a,2)),1.0/2.0))/(x*pow((1-b),1.0/3.0));
cout << fixed << setprecision(3) << p;
}
У вас получается возведение отрицательного числа в дробную степень
pow((-1),m)
при вашем значении x. У вас именно исходя из этого - наличия -1 в степени m эта переменная не может быть double, а вычисления должны проводиться при условии
Значения исходных данных подобраны так, что выражение имеет смысл
которое вы нарушили.
Впрочем, считать сумму таким образом - не то чтобы совсем некорректно... но ужасно некрасиво.
P.S. Для тангенса есть своя функция - tan().
P.P.S. Ваш ряд я бы считал иначе -
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости