数据精度和运算速度的中庸之道

🕒 阅读时间:1 分钟📝 字数:298👀 阅读量:Loading...

问题提出

最近在写步进电机的S型加速算法,遇到了这个问题,由于要计算s型曲线,使用exp函数一次全部计算完大概需要1.2s,单片机的实时性得不到保证,每次在pwm中断回调中计算也是耗费算力。而且我对于函数的封装也是封装了很多层,各种数据类型之间相互转换,精度下降很多。

问题解决

计算速度慢的问题

我发现将double换为float,可以使速度提高10倍以上,因此使用expf,cosf函数将会大大节省运算时间。

数据精度差的问题

在运算是,我很多变量是使用的是u32或者int类型,在进行除法时导致了精度的损失,把这些数据都换为float型,精度提高了很多。另外需要注意的是float的数据存放方式和int不同,float的范围也远远大于int,如果出现(float)a==(int)b这种判断语句,请一定要考虑到float的精度损失,在这个时候a很可能不等于b

Creative Commons

留言评论