求sin的泰勒展开式

#include <iostream>
using namespace std;
const double pi=3.1415926;

//double pow(double x,int y);//求x的y次幂
double mysin(double x);
double myabs(double x);

int main( )
{
    cout<<"sin(π/2)的值为"<<mysin(pi/2)<<endl;
    cout<<"sin(56°)的值为"<<mysin(56)<<endl;
    return 0;
}
/*double pow(double x,int y)//求x的y次幂
{
	int num=1;
	if(x==0)
		return 0;
	if(y==0)
		return 1;
	else
	{
		if(x&&y)
		for(int i=0;i<y;i++)
		{
			num=num*x;
		}
	}
	return num;
}
//下面定义mysin函数,求sin值
double mysin(double x)
{
	int num=1;
	double sin=0,j,sum=0;
	int i,n;
	for(n=0;;n++)
	{
		i=pow((-1),n);
		j=pow(x,2*n+1);
		num=num*(2*n+1);//代表分母位置的阶乘
		sin=(double)(i*j)/(double)num;
		if((double)j/(double)num<0.00001)
			break;
		sum+=sin;
//		cout<<i<<endl;
//		cout<<"j:"<<j<<endl;
		cout<<sum<<endl;		//观察值是否正确
	}
	return sum;
}*/


double mysin(double x)
{
	double sum=x,x_pow=x,item;
	int n=1,sign=1,fact=1;
	for(n=1;;)
	{
		x_pow*=x*x;
		fact*=(n+1)*(n+2);
		sign=-sign;
		item=x_pow/fact*sign;
		n+=2;
		sum+=item;
		if(myabs(item)<1e-6)
			break;
	}
	return sum;
}
double myabs(double x)
{
	return ((x>0)?x:(-x));
}
昨天用自己想的方式来写,很久之后还是不了了之,没写出来,我的程序最后总是得出结果为零,然后想到应该是数据类型的不统一,造成了数据的遗漏,改了很多遍还是不出来,今天还是这样,最终还是得看参考,才慢慢的把它弄明白,这里参考了别人的程序,对比自己错误的放到一起,也能让自己清晰的看见自己的不足,还能查漏补缺。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值