数据精度和运算速度的中庸之道
🕒 阅读时间:1 分钟📝 字数:298👀 阅读量:Loading...
本文摘要
最近在写步进电机的S型加速算法,遇到了这个问题,由于要计算s型曲线,使用exp函数一次全部计算完大概需要1.2s,单片机的实时性得不到保证,每次在pwm中断回调中计算也是耗费算力…
问题提出
最近在写步进电机的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
数据精度和运算速度的中庸之道
作者:Wang Shijie
本文链接:https://wsj-blog.pages.dev/posts/shu-ju-jing-du-he-yun-suan-su-du-de-zhong-yong-zhi-dao/
本文采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
留言评论
评论资源加载失败,请重试。