分享

三角函数sin和cos的实现

 ProgramBird 2014-06-14

使用arm-linux-gcc链接的时候无法找到sin和cos函数。

自己就干脆实现了这两个函数。

在0<x<π/2时,sin x 的泰勒级数是sin x = x - x^3/3! + x^5/5! - x^7/7! ……

而cos x = sin (π/2 - x)

所以只需完成求sinx的函数即可

 

 

  1. #define PI (float)3.1415926  
  2. #define _2PI  (float)6.28318  
  3. #define PI_DIV_2  (float)1.570796  
  4. float _sin(float x)  
  5. {  
  6.     int sign=1;         //符号  
  7.     int itemCnt=4;      //泰勒技级数展开多项式的项数  
  8.     int k=0;          
  9.     float result=0;  
  10.     float tx;       //展开式中各项的x^(2k)  
  11.     int factorial=1;    //展开式中各项的(2k+1)!  
  12.   
  13.     //标准化为正值  sin(-x)=-sin(x)  
  14.     if(x<0)  
  15.     {  
  16.         x=-x;  
  17.         sign *=-1;   
  18.     }  
  19.     //标准化x值到0~2π  
  20.     if(x>_2PI)  
  21.         x-=_2PI;  
  22.     //把0~2π标准到0~π  
  23.     if(x>PI)  
  24.     {  
  25.         x-=PI;  //sin(π+x)=-sin(x)  
  26.         sign*=(-1);  
  27.     }  
  28.     //把0~π标准到0~π/2  sin(π-x)=sin(x)   
  29.     if(x>PI_DIV_2)  
  30.     {  
  31.         x=PI-x;  
  32.     }  
  33.   
  34.   
  35.     tx=x;     
  36.     for(k=0;k<itemCnt;k++)  
  37.     {  
  38.         if(k%2==0)  
  39.         {  
  40.             result += (tx / factorial) ;   
  41.         }  
  42.         else  
  43.         {  
  44.             result -= (tx / factorial) ;  
  45.         }  
  46.   
  47.         tx *= (x*x);  
  48.         factorial *= (2*(k+1));  
  49.         factorial *= (2*(k+1)+1);  
  50.     }  
  51.     if(sign == 1)  
  52.         return result;  
  53.     else   
  54.         return -result;  
  55. }  
  56.   
  57. float _cos(float x)  
  58. {  
  59.     return _sin(PI_DIV_2 - x);  
  60. }  


  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多