回 帖 发 新 帖 刷新版面

主题:帮看下求SIN函数的程序

这是用泰勒公式求sin函数  不知道算法错在哪里  请大虾帮忙指教指教  谢谢了
#include <iostream>
#include <cmath>
using namespace std;
double sinx(double);
double fac(int);
int main()
{
    double x;
    cout<<"please input x:";
    cin>>x;                                                    
    cout<<"sin"<<x<<"="<<sinx(x)<<endl;
    return 0;
}
double fac(int n)
{   double p;
    if(n<0)
    {cout<<"n<0,data error!"<<endl;                  
     p=-1;
    }
     else if(n==0||n==1) p=1;
     else p=fac(n-1)*n;
     return p;

}
double sinx(double x)
{   double sum=x,d=0.0,a=1.0;
     do
     {   sum+=d;
         a=a+2.0;
         d=pow(x,a)/fac(a);
         d=-d;
     }while(fabs(d)>1e-7);
   return sum; 
}

回复列表 (共8个回复)

沙发

有没有人那...帮帮忙啦

板凳

sinx=x-x^3/3!+x^5/5!-x^7/7!+…
楼主的实现漏掉了变化的负号。

double sinx(double x)函数写错了,改为:
double sinx(double x)
{  
    double sum = x,d = 0.0,a = 1.0;
    int flg = 1;
     do
     {
    sum += d;
         a = a + 2.0;
         d = pow(x,a)/fac(a);
         d = d * pow(-1.0,flg++);
     }while(fabs(d) > 1e-7);
   return sum; 
}

3 楼

或者这样:
double sinx(double x)
{  
     double sum = x,d = 0.0,a = 1.0;
     int flg = 1;
     do
     {
    sum += d;
         a = a + 2.0;
         d = pow(x,a)/fac(a);
         //d = d * pow(-1.0,flg++);
    flg = -flg;
    d = d * (flg);
     }while(fabs(d) > 1e-7);
   return sum; 
}

4 楼

我用d=-d 为什么不行呢  能解释一下吗   谢谢你了

5 楼

当然不行了,

因为在这之前有赋值语句:
d=pow(x,a)/fac(a);
该语句的值为正,所以语句d=-d只能使d的值永远为负。

6 楼

再循环一次 不就使d变成正  然后循环下去不就达到 正负交替了吗?
    我新手  很多不明白  呵呵

7 楼

[quote]再循环一次 不就使d变成正  然后循环下去不就达到 正负交替了吗?
    我新手  很多不明白  呵呵[/quote]
注意,循环回来的时候你的d先被计算那个商,那个商永远是正数,再用d=-d就肯定是负数了。

8 楼


谢谢你...  我明白了 
  不过分还是该给楼上那位吧...呵呵 见谅呢

我来回复

您尚未登录,请登录后再回复。点此登录或注册