前言:
对于单片机来说,内存资源十分重要,而现有的一些数学库函数虽然精度很高,但往往为了适应多种类型的单片机或者专门针对某一平台或者款型号进行优化的,从而使得我们的应用受限。故在此,本文提供了两种计算arctan函数的C代码实现,在保证一定精度的情况下(精度可调,牺牲了一些速度),尽可能地降低生成的汇编代码大小。
方法一:采用泰勒级数展开逼近
CODE如下:
float atan(float x)
{
int precision = 100;//控制迭代次数/精度
float sum = 0.0;
float term = x;
float xSquared = x * x;
int sign = 1;
for (int n = 0; n < precision; n++) {
if (n != 0) {
term *= xSquared;
}
sum += sign * term / (2 * n + 1);
sign = -sign;
}
if(fabs(x) < 1) return sum;//绝对值在0-1,直接返回泰勒展开计算值
else return (x > 0 ? HALF_PI : - HALF_PI) - atan(1 / x);//绝对值大于1时,采用atan的性质进行转换,因为当x值较大时,