使用函数funcos求余弦函数近似值

这篇博客介绍了一个用于计算cos(x)近似值的函数实现,通过泰勒级数展开,精确到误差上限e。文章详细解释了代码逻辑,包括迭代过程和如何处理每一项,确保计算效率。最后,给出了一段裁判测试程序样例以及输入输出样例,展示了函数的实际应用。
摘要由CSDN通过智能技术生成

本题要求实现一个函数,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e:

cos(x)=x0/0!−x2/2!+x4/4!−x6/6!+⋯

函数接口定义:

double funcos( double e, double x );

其中用户传入的参数为误差上限e和自变量x;函数funcos应返回用给定公式计算出来、并且满足误差要求的cos(x)的近似值。输入输出均在双精度范围内。

裁判测试程序样例:

#include <stdio.h>
#include <math.h>
double funcos( double e, double x );
int main()
{    
 double e, x;
 scanf("%lf %lf", &e, &x);
 printf("cos(%.2f) = %.6f\n", x, funcos(e, x));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
0.01 -3.14

输出样例:

cos(-3.14) = -0.999899

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB


 

double funcos( double e, double x ){

    double cos=0,flag=1,i=1,fenmu=1,fenzi=1;
    //cos是最终结果
    //flag标记其中某一项的符号,i用来算阶乘,fenzi就是分子,fenmu就是分母
    if(1<e){//有可能第一项就小于e
        return 1.0;
    }
    do{//把大于e的每一项都加起来
        cos+=flag*fenzi*1.0/fenmu;//第一项的值是1
        //下面三行用来处理下一项
        fenzi*=x*x;//下一项的分子比上一项多乘两个x
        fenmu*=(i++)*(i++);//注意,第一项分母0!==1,到第二项分母相当于0!*(0+1)*(0+1+1),
//并且乘完后i为3
        flag*=-1;//符号标记取反
    }while(fenzi*1.0/fenmu>=e);
        cos+=flag*fenzi*1.0/fenmu;//不要忘记把最后一项加起来
    return cos;
    这种函数,对分子和分母在每次处理都利用了上一项
    锻炼迭代思想,不必每次算分子时都要重新用pow求幂,算分母用阶乘求
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值