工程应用常涉及三角函数的快速计算。设计者往往需要降低运算精度以提高程序的运行速度。常用的快速三角函数算法主要包括CORDIC、泰勒展开式逼近、查表等等。然而,网上的文章大多只介绍如何实现相应的算法,而忽视了定量分析算法精度并以此指导设计的过程。此外,算法不同,误差分析的数学方法也不尽相同。在多种算法之间比较时,需要耗费一些时间来建立模型。如果建立一个通用的误差分析框架,框架不局限于现存的几类算法,并且实现自动化的筛选,则有可能提高工作效率。
本文试图从开发者的角度,介绍一种通用的数值型误差分析框架,并以泰勒展开算法为例分析了其展开式项数与精度之间的定量关系,最终试图通过这些工作为快速三角函数算法的设计提供一定参考。
一、快速三角函数算法的原理分析
1. 预处理
对三角函数求值应充分考虑函数本身的性质。首先是周期性:正余弦函数的周期为2π,自变量的所有取值均可变换到单个周期[0, 2π]内,而使因变量保持不变;其次是对称性:例如正弦函数[0, π]上的图像与[π, 2π]上的图像关于X轴对称。取其中一支[0, π],还可以发现[0, π/2]与[π/2, π]上的图像关于平行Y轴的直线x = π/2对称。同理余弦函数也满足类似的性质。
综合上述性质可知,对于某个三角函数,若已知其在[0, π/2]的函数关系及必要的对称关系,则可通过恒等变换表示该三角函数在整个定义域上的取值。
设待求三角函数为f(x),f(x)在[0, π/2]的函数关系为g(x)。上述求值方法可表示为
其中,函数T(t)表示将t变换到单个周期内;函数W(t,y)表示根据t取值,对三角函数的因变量y进行正负变换(即关于X轴对称的象限变换);函数Q(t)表示对t进行关于直线t = π/2的对称变换。
以f(x)=sin x为例说明,W(y,x)、Q(x)、T(x)三个变换函数的定义如下: