新手c++模拟cosx问题

来源:百度知道 编辑:UC知道 时间:2024/07/01 01:39:54
已知cosx=1-x2/2!+x4/4!-x6/6!+..........,输入x,累加所所有绝对值大于0.000001的项计算出cosx的值,并与标准cosx比较。(上面x2为x的平方)

这是我写的程序,可是这程序只能适用于x为-pi/2到pi/2,一旦x不在范围内,循环体就开始无限循环了。。。。。求教为什么会这样?要使这x适用于任意的数,该怎么改程序?

我想了半天,想不出来,只好来求教你们了。。。。。
#include<iostream.h>
#include<math.h>

int f(int k) //求阶乘的递归函数
{
if(k==1) return 1;
else
return k*f(k-1);
};
int main()
{
double x,sum=1,n,s;
int a=2,i=0,k;
cout<<"请输入cosx中x的值";
cin>>x;
n=-x*x;
k=f(a);
while(fabs(s=n/k)>=0.000001)
{
sum+=s;
a+=2;
k=f(a);
n*=-x*x;
i++;
};
cout<<"模似cosx="<<sum<<endl<<"标准cosx="<<cos(x)<<endl<<"循环体执行的次数i="&l

彻底不记得cos/sin了,郁闷!!!!!
也不确定是为什么,但下面改成这样总算有点样子了.
加了一个判断,我觉得那个级数应该是递减的,不知道对不对.
你给的这个表达式没有限定条件的吗?是[0,PI)吗??唉,真的不记得了.

#include<iostream.h>
#include<math.h>

#define PI 3.141592

int f(int k) //求阶乘的递归函数
{
if(k==1) return 1;
else
return k*f(k-1);
};
int main()
{
double x,sum=1,n,s,pres,orginalx;
int a=2,i=0,k;
while(1)
{
sum=1;
i = n = s = 0.;
a = 2;
pres = 999999999;

cout<<"请输入cosx中x的值,输入0退出"<<endl;
cin>>x;
orginalx = x;
x = x > 0 ? x:-x;
if(x<1e-8)
{
break;
}

cout<<"input:"<<x<<endl;
while(x > 2*PI)
{
x = x-2*PI;
}