本人发现网上基本上都是教你如何直接使用C语言库函数来调用cos与sin,但由于很多限制,特别硬件编程,必须要自己写cos和sin函数。网上也有几篇自己实现了cos与sin函数的文章,但是都只有单独实现cos和单独实现sin,没有两个函数一起实现的文章,导致算法完全不一样,造成很多麻烦。 这里我来教大家如何一起实现cos(x)与sin(x) 函数

我这里运用了“泰勒级数公式”以及“负角的三角函数定律”:

可以看出sin(x)与cos(x)的不同主要在于sin多了一项阶乘和一项指数,使得sin是奇数的阶乘和次方,cos是偶数的阶乘和次方。并且sin的第一项是“x”,而cos的第一项是“1”。并且还要注意,如果输入是“复角”,sin的结果需要取复数。所以围绕这几个公式可以写出以下代码,代码中我为了完全脱离<math.h>的限制,我还自己实现了“绝对值函数”和“阶乘函数”:

#include <stdio.h>//sin(-a)=-sin(a)
//cos(-a)=cos(a)double pi=3.14159265359;double fabs_self(double x){if(x>=0){x=x;}else{x=-x;}return x;}double power_self(double x,int k){double sum=1;double i;while (k != 0){sum*=x;--k;}return sum;
}double sin(double x)
{//****************************int counter=0;if(x<0){counter=1;}else{counter =0;}x=fabs_self(x);//****************************int t,q=1;double term,factorial=1.0,sum2,sxm,sum1=0;sum2=x;for(t=2;;t++){factorial=factorial*t;if(t%2!=0){sum1=sum2;q=q*(-1);sxm=fabs_self(power_self(x,t));term=sxm/factorial;sum2=q*term+sum2;}if(fabs_self(sum2-sum1)<=1e-5)break;}if(counter==1){sum2=-sum2;return sum2; }else{return sum2;}}double cos(double x)
{//********************x=fabs_self(x);//********************int t,q=1;double term,factorial=1.0,sum2=1,sxm,sum1=0;for(t=2;;t++){factorial=factorial*t;if(t%2==0){sum1=sum2;q=q*(-1);sxm=fabs_self(power_self(x,t));term=sxm/factorial;sum2=q*term+sum2;}if(fabs_self(sum2-sum1)<=1e-5)break;}return sum2; }int main()
{printf("sinx=%f",sin(20));printf("\n");printf("cosx=%f",cos(20));return 0;
}

计算结果为:

Google计数器的结果为:

 

我们可以看到计算结果是非常精确的。

但是!这个代码还有个小问题!那就是如果输入的弧度特别大,可能会出现超出数据类型范围的问题,导致无法得出正确的值,比如我想求63弧度的sin和cos的值,得出来的结果就完全不对:

这个问题的原因是输入的弧度远远大于了整个圆“2*pi≈6.28318530718” 的弧度值,导致在计算过程中的阶乘,指数时,运行结果会远远超出double类型的数据范围,使结果出错。这里的解决方案是利用“归一化角度”,先将输入的较大的弧度值转化成“2*pi”以内的弧度,再进行计算。如果各位想知道如何“归一化角度”求sin和cos的值的话,可以看我另外一篇文章

用c语言实现"归一化角度"后的cos(x)与sin(x)

链接是:

用c语言实现“归一化角度“后的cos(x)与sin(x)_suxiao6666的博客-CSDN博客https://blog.csdn.net/suxiao6666/article/details/123565008

如果各位的项目不需要输入较大的弧度,那么可以直接使用这篇文章所提供的代码

用c语言实现cos(x)与sin(x) 函数以及“绝对值函数”和“阶乘函数”相关推荐

  1. c语言其他函数调用main函数,C语言中的main函数以及main函数是如何被调用的

    main函数是C语言中比较特殊的函数,C程序总是从main函数开始执行,main函数的原型是: int main(int argc, char *argv[]); 其中argc是命令行参数的个数,ar ...

  2. 用c语言实现cos x 函数

    用c语言实现cos x 函数 太宰 (泰勒-麦克劳林公式) #include <stdio.h> #include<stdlib.h> #include <math.h& ...

  3. 【小程序】C语言实现简易钢琴-利用sin函数构造不同频率波形模拟各琴键发音

    根据钢琴音调频率对照表,使用sin函数构造对应频率正弦波数据模拟各琴键声音,实现简易钢琴效果,结果写入wav文件中. 目录 程序效果 实现过程 样例代码 测试用例 参考资料 程序效果 截图1:键位图 ...

  4. C语言的cos(x)函数

    COS(x)函数 今天在做题的时候发现C语言的COS(x)函数中x是弧度制,在此写下用以记住它!!! 圆周率的实现 既然cos(x)函数中变量x是弧度制,那么求整数角度的余弦值的时候少不了用到圆周率, ...

  5. c++语言函数大全,C++函数

    本篇文章帮大家学习C++函数,包含了C++函数使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. C++语言中的函数在其他编程语言中也称为过程或子例程. 我们可以创建函数来执 ...

  6. python数学库函数包括求最大公约数函数吗_pythonmathcot函数_math库是python语言的数学模块吗_Python中的数学模块:...

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 当我们在日常生活中编写程序时,我们通常遇到需要使用数学来完成任务的情况.像其他编程语言一样,Python提 ...

  7. 用r语言画出y = ax^2 + bx + c,R语言中使用curve函数绘制常用函数曲线

    前面文章中介绍了使用plot函数绘制图形的方法.本文介绍一下使用R中curve函数绘制常见函数曲线的方法. 1.curve函数简介 curve函数语法格式如下: curve(expr, from = ...

  8. matlab 导数表达式,matlab语言怎样表示x的导数,matlab 如何求自定义函数的导数

    matlab的求导命令与求导法 建立符号变量命令sym和syms调用格式: x=sym('x'), 建立符号变量x: syms x y z , 建立多个符号变量x,y,z: matlab求导命令dif ...

  9. C语言求解贝塞尔函数方程,任意阶复宗量贝塞尔函数的数值计算.pdf

    任意阶复宗量贝塞尔函数的数值计算,零阶贝塞尔函数,一阶贝塞尔函数,0阶贝塞尔函数,第一类零阶贝塞尔函数,零阶修正贝塞尔函数,0阶修正贝塞尔函数,n阶贝塞尔函数近似,贝塞尔函数,matlab贝塞尔函数 ...

最新文章

  1. docker run 或者 docker restart 启动镜像就自动退出
  2. Void void Void用在泛型
  3. 两种删除internal table entry的性能比较
  4. 玩转GIT系列之【git的分支操作(查看分支/切换分支/新建分支/删除分支)】
  5. linux加一个2t硬盘吗,在linux下新增一块硬盘的操作。(包含大于2T的硬盘在linux下挂载操作)...
  6. 使用 MSIX 打包 DotNetCore 3.0 客户端程序
  7. 姚班天才少年鬲融凭非凸优化研究成果获得斯隆研究奖
  8. RocketMQ(五)——工作原理
  9. Android开发笔记(一百一十九)工具栏ToolBar
  10. Windows下使用platform.pk8 和platform.x509.pem生成jks签名文件
  11. 什么是企业邮箱客户端授权码,如何使用?
  12. Codeforces 1342E Placing Rooks(容斥+组合数学)
  13. 基于C#Winform+MySQL的商务娱乐会馆自助服务系统
  14. 蚂蚁p8多少股票_蚂蚁金服上市了,小编不想努力了。
  15. golang从channel读数据的各种情况
  16. Oracle表数据转换为XML格式数据
  17. RSA的非对称加密,公钥加密私钥解密,本地测试
  18. 数采物联仪表照片抓拍AI图像识别软件使用说明
  19. AxureRP7.0教程 AxureRP7.0数学函数详解
  20. 广东省外语艺术职业学院计算机专业,广东省外语艺术职业学院有哪些专业 附好的重点专业名单...

热门文章

  1. cmd命令:返回上一层目录/进入电脑 D盘根目录/进入指定目录
  2. 杰理之linein LAC底噪【篇】
  3. Android APP架构设计——MVP的使用示例
  4. NIC(Network Interface Controller,网络接口控制器)
  5. “世界杰出女科学家成就奖”组委会宣布2021年度五位获奖者
  6. 网络抓包-抓包工具tcpdump的使用与数据分析
  7. FDC2214电容检测芯片-液位检测(金属探针探测液面)方案分析
  8. Vue3 过10种组件通讯方式
  9. flv.js php,B站视频开源代码flv.js+HTML5无flash播放视频
  10. IPA进军城市大脑丨实在智能与银江技术达成战略合作