c++ вычислить значение выражения

126
27 августа 2019, 22:30

Во входном потоке задано три вещественных числа 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;
}
Answer 1

У вас получается возведение отрицательного числа в дробную степень

pow((-1),m)

при вашем значении x. У вас именно исходя из этого - наличия -1 в степени m эта переменная не может быть double, а вычисления должны проводиться при условии

Значения исходных данных подобраны так, что выражение имеет смысл

которое вы нарушили.

Впрочем, считать сумму таким образом - не то чтобы совсем некорректно... но ужасно некрасиво.

P.S. Для тангенса есть своя функция - tan().

P.P.S. Ваш ряд я бы считал иначе -

READ ALSO
С++ олимпиадная задача

С++ олимпиадная задача

Старый пират Пью спрятал свое золото, но для надежности не в одном месте, а частями в нескольких тайникахНо чтобы не забыть места хранения...

112
C++ циклический сдвиг влево [закрыт]

C++ циклический сдвиг влево [закрыт]

Дан линейный массив на N элементовВыполнить циклический сдвиг всех его элементов на один влево начиная с первого нулевого элемента

111
Не могу #include &lt;variant&gt;. C++

Не могу #include <variant>. C++

Хочу подключить библиотеку variant (Которая на некоторых сайтах указывается как стандартная и есть на С++17), но мне выдает ошибку No such file or directory

133