计算器遵循啥样的算法来查找正弦值?
Posted
技术标签:
【中文标题】计算器遵循啥样的算法来查找正弦值?【英文标题】:What kind of algorithm do calculators follow to find values of sine?计算器遵循什么样的算法来查找正弦值? 【发布时间】:2014-01-22 08:52:20 【问题描述】:如果有人给我一个角度,比如 38 度,我将如何在不使用实际制作 38 度直角三角形并测量边的情况下找出正弦函数的值?我知道我可以使用一些三角恒等式来逼近这些值,但这会很费力。
我确信计算器和计算机中使用的算法不会这样做。就像如果我需要找到 pi,我会使用这样的算法:
而不是得到一个指南针和尺子和画圆圈。
但是,我找不到任何这样的正弦函数算法。
有人可以帮我解决这个问题吗?
【问题讨论】:
多项式 (Taylor) 级数是一种方法,但我猜计算器在实践中使用更复杂的方法。 我会说表格查找、插值和三角关系或硬件更接近事实。 lab.polygonal.de/?p=205 经典算法是CORDIC Sin(x) = x - x^3/3! + x^5/5! - ... + (-1)(n+1) * x^(2*n-1)/(2n-1)! 【参考方案1】:对此最常见的算法之一是将泰勒级数的前几项用于正弦。
sin x = x - x3/3! + x5/5! - x7/7! + ...,
使用的项越多,得到的近似值就越好。 X 在此处以弧度表示,但您可以很容易地从度数中获得弧度。然后,如您所见,只有基本运算:+、-、*、/ 可用于计算正弦。
在带有浮点协处理器芯片的机器中使用 CORDIC 算法(带有一些其他模块),因为它也可以在硬件中实现。
【讨论】:
【参考方案2】:改进约翰的回答:
为 x 以 0 到 pi/2 的不同弧度创建 sin(x) 表。
您可以使用如下插值:sin(x+dx) = sin(x) + dx*cos(x)
cos(x) = sin(pi/2-x)。
同样,cos(x+dx) = cos(x) - dx*sin(x)。
【讨论】:
【参考方案3】:我不知道任何计算器实际使用的是什么,但是具有线性(或更高阶,如果需要)插值的查找表应该足够简单和准确,足以达到 3 个精度位置,或者使用更密集的表来实现更多精度。您只需要一个四分之一周期的表格,并且可以将其用于所有正弦和余弦计算并进行适当的转换。如果你有足够的能力和精度,你可以尝试迭代一个泰勒级数之类的,但舍入误差会累积在你身上。
【讨论】:
以上是关于计算器遵循啥样的算法来查找正弦值?的主要内容,如果未能解决你的问题,请参考以下文章
CMOS图像传感器产生的信号如何处理?用啥样的电路?啥样的芯片?(我用的传感器是mt9m034