【发布时间】:2017-06-06 15:32:55
【问题描述】:
我正在做一些简单的事情......我想,但有些事情让我很困扰。
double x,t,cos_aprox,eps;
int k;
t=1.0;
k=1;
cos_aprox=1.0;`
printf("Introduceti x pentru care se calculeaza cos(x) si eroarea epsilon:\n");
if(scanf("%lf%lf",&x,&eps)!=2)
{
printf("Date eronate!!\n");
exit(1);
}
else
{
do
{
t=t*(-1)*x*x/(k*(k+1));
cos_aprox+=t;
k+=2;
}
while(fabs(t)>eps);
printf("Valoarea aproximativa a lui cos(%g) este %.9g. k este %d\n",x,cos_aprox,k);
printf("Valoarea lui cos(%g), folosind functia din biblioteca, este %.9g.",x,cos(x));
}
它返回了很好的结果,但是当我选择超过 39 弧度的任何值时,它与库函数 cos(x) 之间存在显着差异。
【问题讨论】:
-
仅当参数在
[-pi/4,pi/4]范围内时有效。您需要大整数数学来计算减少所需的 pi 位数。论文:citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.67.5616 -
在 while 循环之前使用
x = fmod(x, 2*pi);进行改进。对于像x > 1e10这样的大型x,这仍然会有问题。如何使用您自己的代码在广泛的范围内精确地工作cos()的细节并不是“简单的事情”
标签: c trigonometry taylor-series