Расчет не выводит ожидаемый ответ - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь вычислить арктан числа, используя формулу:

arctan(x) = x - x^3/3 + x^5/5 - x^7/7...

Я должен вычислить его до 20 знаков после запятой.Ответ должен быть 0.78539....

Это код, который я написал, включая некоторые операторы отладки.Проблема в расчете, я думаю, но я просто не вижу этого.Может ли кто-нибудь указать мне правильное направление, пожалуйста?

РЕДАКТИРОВАТЬ: Не может использовать функцию atan, должен быть вручную рассчитан с использованием двойной переменной из пользовательского ввода.

#include <iomanip>
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;

int main(void)
{
 double x;
 int i;
 int j;
 int y=3;

  cout<<"Please enter the number you wish to calculate the arctan of:"<<endl;
  cin>>x;

   //Calculate arctan of this number
   cout<<x;
   cout<<"\n";
   cout<<y;
   cout<<"\n";

   cout<<"Start\n";

   x=x-(pow(x,y)/y);
   y=y+2;
   cout <<  setprecision (20) << x;
   cout<<"=x before loop\n";
   cout<<y;
   cout<<"=y before loop\n";

   for(i=0;i<9;i++)
    {
     x=x+(pow(x,y)/y);
      cout<<x;
      cout<<"=x1 in loop\n";
     y=y+2;
      cout<<y;
      cout<<"=y1 in loop\n";

     x-(pow(x,y)/y);
      cout<<x;
      cout<<"=x2 in loop\n";
     y=y+2; 
      cout<<y;
      cout<<"=y2 in loop\n";
    }
return 0;

}

Ответы [ 4 ]

3 голосов
/ 01 марта 2012

Ну, ваш x меняется!Возможно, вы захотите использовать другую переменную для хранения вычисленного значения и аргумента вашей функции.Тем не менее, не ожидайте точных результатов, потому что все эти вычисления включают в себя округление.

3 голосов
/ 01 марта 2012

Эта строка:

 x-(pow(x,y)/y);

может иметь отношение к вашей проблеме.

2 голосов
/ 01 марта 2012

Я настоятельно рекомендую вам использовать встроенную функцию atan, она, скорее всего, хорошо оптимизирована для вашей архитектуры, а также является стандартной функцией, признанной большинством программистов на C ++.

#include <cmath>
#include <iostream>    

int main()
{
    double d;
    std::cout << "enter number" << std::endl;
    std::cin  >> d;
    std::cout << "atan of: " << d 
              << " is "      << std::atan(d) 
              << std::endl;
    return 0;
}
1 голос
/ 01 марта 2012

Я согласен с @Mystical.Я не думаю, что вы получите 20 цифр точности из двойного.Я думаю, что вам нужен длинный double (если он существует в вашей системе) или, возможно, вам нужно реализовать свой собственный класс с большим числом ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...