计算不输出预期答案

时间:2012-02-29 22:39:15

标签: c++ math for-loop

我正在尝试使用以下公式计算数字的arctan:

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 个答案:

答案 0 :(得分:3)

嗯,你的x正在改变!您可能希望使用另一个变量来存储到目前为止计算的值和函数的参数。也就是说,不要期望精确的输出,因为所有这些计算都涉及舍入。

答案 1 :(得分:3)

这一行:

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

可能与您的问题有关。

答案 2 :(得分:2)

我强烈建议您使用内置的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;
}

答案 3 :(得分:1)

我同意@Mystical。我不认为你会得到20位数的精度。我认为你需要一个很长的双倍(如果你的系统上存在)或者,你可能需要实现自己的big-num类......