计算sinx的c语言代码,C如何计算sin()和其他数学函数?

好了,孩子们,是时候请职业选手了.这是我对缺乏经验的软件工程师最大的抱怨之一。他们从零开始计算先验函数(使用泰勒级数),就好像在他们的生活中没有人做过这样的计算。不是真的。这是一个定义明确的问题,已经被非常聪明的软件和硬件工程师处理了数千次,并且有一个定义良好的解决方案。基本上,大多数超越函数使用Chebyshev多项式来计算它们。至于使用哪种多项式,则视情况而定。首先,关于这个问题的圣经是哈特和切尼写的一本叫做“计算机近似”的书。在这本书中,你可以决定你是否有一个硬件加法器,乘法器,除法器等,并决定哪些操作是最快的。例如,如果你有一个非常快的除法器,最快的计算正弦的方法可能是P1(X)/P2(X),其中P1,P2是Chebyshev多项式。如果没有快速除法器,它可能只是P(X),其中P比P1或P2有更多的项.所以它会慢一些。因此,第一步是确定您的硬件和它可以做什么。然后选择Chebyshev多项式的适当组合(通常形式为cos(Ax)=ap(X),例如,P是Chebyshev多项式)。然后决定你想要的十进制精度。例如,如果您想要7位精度,请在我提到的书中的适当表格中查找,它将给您(对于精度=7.33)一个数字N=4和多项式数3502。n是多项式的顺序(所以它是p4.x^4+p3.x^3+p2.x^2+p1.x+p0),因为N=4。然后在书的后面查找p4,p3,p2,p1,p0的实际值(它们将在浮点)。然后在软件中以如下形式实现算法:(p4.x+p3).x+p2).x+p1).x+p0.这是如何计算硬件上的余弦到小数点7位)。

请注意,FPU中超验操作的大多数硬件实现通常涉及一些微码和类似的操作(取决于硬件)。Chebyshev多项式是用于大多数超越,但不是所有。例如,使用牛顿拉夫森法的二次迭代,首先使用查找表,平方根更快。再一次,“计算机近似”一书会告诉你这一点。

如果你打算实现这些功能,我建议任何人都能得到这本书的副本。对于这类算法来说,它确实是圣经。注意,计算这些值的方法有很多,如cordics等,但是对于只需要低精度的特定算法,这些方法往往是最好的。为了保证每次的精度,切比雪夫多项式是可行的。就像我说的,明确的问题。现在已经解决了50年了.就是这样的。

现在,尽管如此,有一些技术可以使用Chebyshev多项式来获得一个低次多项式的单一精度结果(就像上面的余弦例子)。然后,还有其他方法可以在值之间进行插值以提高精度,而不必使用更大的多项式,例如“Gal的精确表法”。后一种技术就是文章所指的ACM文献所指的。但最终,切比雪夫多项式是用来获得90%的方式。

好好享受吧。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值