arctan单片机C语言多种方式代码实现对比 math库 查表法 泰勒连分式展开 分段多项式逼近

 

背景:使用math库的atan是比较方便,特别是带硬件浮点的芯片,但在成本资源限制的情况下,使用库函数比较消耗资源,特别是需要频繁运算的项目。所以在保证项目需求的同时可通过降低运算精度来提升运算速度节省系统资源。

下面是常用的三角函数降幂处理方式,与math的atan对比,保证最大误差值在0.001以内,做运算耗时对比。

对比结果:

在主频36Mhz无硬件浮点的情况下,

 方式1:分段多项式,最高次幂2 ,0~90范围最大误差 0.001,单次运行耗时30us。


 方式2:查表法1000分辨率,0~45度误差0.00001 ,45以上最大误差0.0006  单次运行耗时13us。


 方式3:泰勒连分数方式,迭代次数3次 最高次幂3 ,0~90范围最大误差 0.001,单次运行耗时45us。

方式各有利弊,查表法空间换时间,泰勒展开精度可调但比较耗时,分段多项式适中但要考虑分段衔接问题等。

 

下列是具体代码实现

头文件及宏定义

#include "math.h"
#include <stdio.h>

float arr_arctan[]={0.000001,0.001,0.001999997,0.002999991,0.003999979,0.004999958,0.005999928,0.006999886,0.007999829,0.008999757,0.009999667,0.010999556,0.011999424,0.012999268,0.013999085,0.014998875,0.015998635,0.016998363,0.017998056,0.018997714,0.019997334,0.020996914,0.021996452,0.022995946,0.023995394,0.024994794,0.025994144,0.026993442,0.027992686,0.028991874,0.029991005,0.030990075,0.031989084,0.032988029,0.033986908,0.034985719,0.03598446,0.03698313,0.037981725,0.038980245,0.039978687,0.040977049,0.04197533,0.042973527,0.043971638,0.044969662,0.045967596,0.046965438,0.047963187,0.04896084,0.049958396,0.050955852,0.051953207,0.052950458,0.053947604,0.054944642,0.055941571,0.056938389,0.057935094,0.058931683,0.059928155,0.060924508,0.06192074,0.062916849,0.063912833,0.06490869,0.065904418,0.066900015,0.067895479,0.068890809,0.069886002,0.070881056,0.07187597,0.072870741,0.073865367,0.074859848,0.07585418,0.076848361,0.077842391,0.078836266,0.079829986,0.080823547,0.081816949,0.082810188,0.083803264,0.084796175,0.085788917,0.08678149,0.087773892,0.088766121,0.089758174,0.09075005,0.091741748,0.092733264,0.093724597,0.094715746,0.095706708,0.096697482,0.097688065,0.098678456,0.099668652,0.100658653,0.101648456,0.102638059,0.10362746,0.104616658,0.10560565,0.106594435,0.10758301,0.108571375,0.109559527,0.110547464,0.111535184,0.112522686,0.113509967,0.114497027,0.115483862,0.116470471,0.117456853,0.118443005,0.119428926,0.120414614,0.121400066,0.122385281,0.123370258,0.124354995,0.125339488,0.126323738,0.127307742,0.128291498,0.129275004,0.130258259,0.131241261,0.132224007,0.133206497,0.134188728,0.135170699,0.136152407,0.137133852,0.13811503,0.139095941,0.140076583,0.141056954,0.142037052,0.143016875,0.143996422,0.14497569,0.145954679,0.146933386,0.147911809,0.148889948,0.149867799,0.150845362,0.151822634,0.152799614,0.1537763,0.154752691,0.155728784,0.156704578,0.157680071,0.158655262,0.159630149,0.160604729,0.161579002,0.162552966,0.163526619,0.164499959,0.165472984,0.166445694,0.167418085,0.168390157,0.169361908,0.170333336,0.17130444,0.172275217,0.173245666,0.174215786,0.175185575,0.176155031,0.177124153,0.178092938,0.179061386,0.180029494,0.180997261,0.181964686,0.182931766,0.183898501,0.184864887,0.185830925,0.186796612,0.187761947,0.188726927,0.189691552,0.19065582,0.191619729,0.192583277,0.193546464,0.194509287,0.195471745,0.196433837,0.19739556,0.198356913,0.199317895,0.200278504,0.201238738,0.202198597,0.203158078,0.204117179,0.2050759,0.206034239,0.206992194,0.207949764,0.208906947,0.209863742,0.210820147,0.21177616,0.212731781,0.213687007,0.214641838,0.215596271,0.216550305,0.217503939,0.218457171,0.21941,0.220362424,0.221314442,0.222266053,0.223217254,0.224168044,0.225118423,0.226068388,0.227017938,0.227967072,0.228915788,0.229864084,0.23081196,0.231759414,0.232706445,0.23365305,0.234599229,0.235544981,0.236490303,0.237435195
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值