stm32 浮点数问题 您所在的位置:网站首页 stm32指数运算 stm32 浮点数问题

stm32 浮点数问题

2024-07-18 04:13| 来源: 网络整理| 查看: 265

http://www.openedv.com/posts/list/40175.htm

由于我后面的课题需要涉及较多的浮点运算,只熟悉f103,它不带FPU,所以软件浮点算法就显得很重要了。这几天在做些小研究和测试。 今天又仔细研读了谭浩强的C语言书的数据类型章节,上面有说到c编译系统总将float类型转换成double类型来进行浮点运算,然而一般应用中7位有效数字的占32位的float类型已基本满足需求,若转为16位有效数字64位double类型岂不是没什么必要?速度岂不是会降低? 今天将原子哥的内部温度传感器实验的浮点运算的代码作了个小小的改动,却是大大的改善,结果如下: 温度计算公式原代码为: temp=(1.43-temp)/0.0043+25; // 这句产生的代码量为1584字节 改为单精度: temp=(1.43f-temp)/0.0043f+25; //这句产生的代码量仅为40字节! 代码量减为原来的1/40,单从这个角度来看的话意味着计算速度有接近40倍的提升!!!具体速度未测试,但数十倍的提升应该有的。 哦,尼玛!太兴奋了! 可能有些同学还不知道1.43f的用法,c语言书中说了这是将浮点常量指定为单精度,若不加后缀f,将作双精度来处理。 速度能提升这么多,我想部分原因是因为stm32是32位的MCU,32位及其以下的数据处理时间差别不大,但对于大于32位的64位double类型肯定慢很多了~ 欢迎验证~~~

呵呵,不错,楼主一定收获很大吧,这种用法我都用了几年了,其实,C语言里面数据处理很重要的,但也是C语言基础,其实不仅仅是这些,还有很多细要注意的,我也分享一下曾经写过的一个函数,里面就有这样的方法:

// ------------------------------------------------------------------------ // // void calcPTMS5541(float *pressure, float *temperature,u32 *p0, u32 *p1) { float dt, off, sens; *p0 = *p0 & 0xFFFF; *(p0+1) = *(p0+1) & 0xFFFF; dt = -10000.0f + *(p0+1) - (8.0f * (*(p1+8))); off = 10000.0f + (*(p1+5)) + ( ( ( *(p1+7)-250.0f) * dt ) / 4096.0f); sens = 3000.0f + (*(p1+4) / 2.0f) + ( ( ( *(p1+6)+200.0f) * dt ) / 8192.0f); if(pressure!=NULL) *pressure = 1000.0f + (( sens * (*p0- off)) / 4096.0f); if(temperature!=NULL) { if(dt


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有