十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
就是用查表法,事先计算好查找表,比如说我的应用要求精确到1度,就建2个这样的表。
站在用户的角度思考问题,与客户深入沟通,找到岱岳网站设计与岱岳网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、网站建设、外贸网站建设、企业官网、英文网站、手机端网站、网站推广、域名申请、网站空间、企业邮箱。业务覆盖岱岳地区。
cosT[360] = {}
sinT[360]= {}
然后要计算的时候直接把你要计算的角度转换成最接近这个角度的整数,查表即可。
如果要更高的精度,就建更大的查找表
C语言里sin函数和cos函数是C标准数学函数库中的函数,调用需要引入math.h头文件。
一、sin() 函数描述:
C 库函数 double sin(double x) 返回弧度角 x 的正弦。sin() 函数的声明:double sin(double x)。
参数:x -- 浮点值,代表了一个以弧度表示的角度。
返回值:该函数返回 x 的正弦。
二、cos() 函数描述:
cos() 函数的功能是求某个角的余弦值。cos() 函数的声明:double cos(double x)。
参数:x -- 浮点值,代表了一个以弧度表示的角度。
返回值:该函数返回 x 的余弦。
扩展资料:
相关的三角函数:
double asin (double); 结果介于[-PI/2,PI/2]
double acos (double); 结果介于[0,PI]
double atan (double); 反正切(主值),结果介于[-PI/2,PI/2]
double atan2 (double,double); 反正切(整圆值),结果介于[-PI,PI]
参考资料来源:百度百科-math.h
scanf时,float 用 %f ,double 用 %lf. 因为scanf不知道你传的是float还是double数的地址,你必须通过%f %lf来告诉它这一点。
printf时,float、double都用%f,无需区分,因为即使你传的是float,也会被编译器先自动转换为double再交给printf.
本质有问题。
cos(x) = x^0/0!-x^2/2!+x^4/4!-x^6/6!+……
这个公式是运用泰勒公式把函数 f(x)=cos(x) 在 x=0 点展开成多项式 ,当 n 不是很大时 ,只有 x=0 附近的数才能算出比较准确的值,而当 n 很大时 n! 也非常大 ,这时若 x1 那么 x^n 也非常大 ,如果仍采用常规措施怎么可能会对呢?不溢出才怪。
给一些提示:
1,利用函数周期性,始终保持较小的 x ;
2,如果已经求得 t = x^n/n! ,那么
x^(n+2)/(n+2)! = t * x^2 / ( (n+1)*(n+2)) ;
这样整个运算过程中就能尽量避免出现太大的值 ,并能提高效率 ,这只是个思路,实现时请注意细节。
顺便给个粗略的实现,仅供参考,如下:
double funcos(double e, double x)
{
int flag = 1,m = 0;
double k = 1 ,sum = 0;
x = fmod(x,2*3.1415926) ;
while( fabs(k) = e || fabs(sum) 1 ){
sum += flag*k;
k /= ( (m+1)*(m+2) / (x*x) );
m += 2;
flag = -flag;
}
return sum;
}
你的程序其他地方没有问题,printf 不同于 scanf ,会自动对精度进行扩展,所以 printf("%f",...); 可以输出 double 。
库函数就是在c语言的内部已经声明、定义好了的只用引用一些头文件即可直接使用而不用自己额外定义的功能函数,如printf,scanf,power,sin,cos等各种类型的函数。