前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >对方向你转账60元--三角函数方法精确位的实现

对方向你转账60元--三角函数方法精确位的实现

作者头像
程序员小藕
发布2020-07-28 17:30:24
5270
发布2020-07-28 17:30:24
举报
文章被收录于专栏:程序员小藕

今天接到一个小小的任务,让我用最刚强的"C语言"来实现

#include <math.h>的内置函数--->正弦函数...

  emmm,看着酬劳60,闲着没什么事,好吧,那就给你搞一把,于是接下了这个作业,就当自己复习一下C语言吧!

那个学生发了我一份作业的文档在下面,对于sin(x)的值是用泰勒级数公式来清楚的描述正弦函数,,

我就在想我解决了sin(x),那么是不是就解决了cos(x)余弦函数呢!tan(x),cot(x),sec(x)....

这一类的三角函数是不是也就解决了呢?我也会想我的三角函数能实现出来那么对应的反三角函数呢?那么一个"acrsin(x),arccos(x),arctan(x)呢?".

看到这里别慌,千万别放弃思考!!!

同样是利用我们强大的泰勒级数公式可以解决哟!

  上面的就是arcsin(x)的泰勒级数,,你是不是心里有想法了啊!!!

  接下来! 对于刚刚写的sin(x)的实现参考!->明人不说暗话,代码直接上..

代码语言:javascript
复制
  1 #define PI (float)3.1415926
  2 
  3 #define _2PI  (float)6.28318
  4 
  5 #define PI_DIV_2  (float)1.570796
  6 
  7 #include <math.h>
  8 
  9 #include <stdio.h>
 10 
 11 long factorial_iteration(int n){//定义阶乘函数 
 12 
 13     int result = 1;
 14 
 15     while(n>1){
 16 
 17         result *= n;
 18 
 19         n--;
 20 
 21     }
 22 
 23     return result;
 24 
 25 }
 26 
 27 float accuracy(float a,float x){//确定你的第一问精度问题 a表示精度x表示度数 
 28 
 29     x=(x*PI)/180;//将角度转化弧度 
 30 
 31     float singsum;
 32 
 33     for(int i=1;;i++){
 34 
 35         singsum=(pow(x,2*i-1)/factorial_iteration(2*i-1));
 36 
 37         if(singsum<0.00001){
 38 
 39             return i;//返回确定精度的第几项
 40 
 41             break;
 42 
 43         }
 44 
 45     }
 46 
 47 }
 48 
 49 float _sin(float x,double n)
 50 
 51 {
 52 
 53     int sign=1;            //符号
 54 
 55     int itemCnt=n;        //泰勒技级数展开多项式的项数
 56 
 57     int k=0;        
 58 
 59     float result=0;
 60 
 61     float tx;        //展开式中各项的x^(2k)
 62 
 63     int factorial=1;    //展开式中各项的(2k+1)!
 64 
 65     x=(x*PI)/180;//将角度转化弧度 
 66 
 67     //标准化为正值  sin(-x)=-sin(x)
 68 
 69     if(x<0)
 70 
 71     {
 72 
 73         x=-x;
 74 
 75         sign *=-1; 
 76 
 77     }
 78 
 79     //标准化x值到0~2π
 80 
 81     if(x>_2PI)
 82 
 83         x-=_2PI;
 84 
 85     //把0~2π标准到0~π
 86 
 87     if(x>PI)
 88 
 89     {
 90 
 91         x-=PI;    //sin(π+x)=-sin(x)
 92 
 93         sign*=(-1);
 94 
 95     }
 96 
 97     //把0~π标准到0~π/2  sin(π-x)=sin(x) 
 98 
 99     if(x>PI_DIV_2)
100 
101     {
102 
103         x=PI-x;
104 
105     }
106 
107 
108 
109 
110 
111     tx=x;    
112 
113     for(k=0;k<itemCnt;k++)
114 
115     {
116 
117         if(k%2==0)
118 
119         {
120 
121             result += (tx / factorial) ; 
122 
123         }
124 
125         else
126 
127         {
128 
129             result -= (tx / factorial) ;
130 
131         }
132 
133 
134 
135         tx *= (x*x);
136 
137         factorial *= (2*(k+1));
138 
139         factorial *= (2*(k+1)+1);
140 
141     }
142 
143     if(sign == 1)
144 
145         return result;
146 
147     else 
148 
149         return -result;
150 
151 }
152 
153 int main(){
154 
155     double a[6]={0.8,10,25,45,175,399};
156 
157     for(int i=0;i<6;i++){
158 
159         printf("自己定义的%d的正弦函数的值为:  ",a[i]);
160 
161         double q=accuracy(0.0001,a[i]);
162 
163         int b=a[i];
164 
165         double result=_sin(b,q);
166 
167         printf("%f\n",result);
168 
169         printf("程序里面自己定义的%d正弦函数值是:%f\n",a[i],sin(a[i]*PI/180));
170 
171     }    
172 
173 } 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档