[技术问答] 新人求各位大神解惑

[复制链接]
700|5
 楼主| 陶文韬 发表于 2018-10-24 16:58 | 显示全部楼层 |阅读模式
Rtemp = 19246500/Rtemp-4700;                //4095/Rtemp*4700-4700;(数据无变化,不清楚问题)
再调试的时候出现的问题,用前面的代码能够正常的获取到数据,但是用注释掉的代码值是不会变化的;
Rtemp是ADC的值;
tianxj01 发表于 2018-10-24 17:09 | 显示全部楼层
运算时候,必须注意参与运算的数据的有效位,这个是初学的很容易犯的一个错误。
后面一个公式,各有效位都是4096以内,编译器调用的应该就是16位运算,这里就直接产生了大量的丢位、溢出等的问题。所以,你要获得理想结果,过程的数据精度,是你必须注意的。这里,假如Retmp是一个2048---4095之间的一个结果,那么后面这个公式运行的结果都=0。而2047---1024的话,结果都等于1。这很明显不是你需要的结果吧?
想要后面一个算法达到希望的精度,你必须定义数据为浮点,才行。
 楼主| 陶文韬 发表于 2018-10-24 17:19 | 显示全部楼层
tianxj01 发表于 2018-10-24 17:09
运算时候,必须注意参与运算的数据的有效位,这个是初学的很容易犯的一个错误。
后面一个公式,各有效位都 ...

多谢大佬,懂你意思了,就是数是几位就调用几位的运算,不是定义变量的类型来决定几位运算。
新塘003不是不能使用浮点运算嘛,所以我这边都是扩大了倍数
tianxj01 发表于 2018-10-24 17:37 | 显示全部楼层
本帖最后由 tianxj01 于 2018-10-24 17:51 编辑
陶文韬 发表于 2018-10-24 17:19
多谢大佬,懂你意思了,就是数是几位就调用几位的运算,不是定义变量的类型来决定几位运算。
新塘003不是 ...


可以用浮点运算,这个和用什么芯片没什么关系,有关系的是某些芯片支持多位浮点运算(硬件),而大多数通用8位机是不可能支持硬件浮点运算的。
用8位机做浮点运算,编译器会调用浮点运算子程序,根据单片机运算速度强弱,运算时间差异非常大,反正8位单片机做浮点运算速度都是比较慢的就是了。
因此,一般来说,我们尽量避免让程序执行浮点运算,尤其是那些对速度有要求的过程。对于期望的精度,我们可以有很多办法,比如尽量采用定点数,除法因子放置最后等等。
比如,我们要获取100/99的除非结果,很明显,如果用整数运算,结果只能是1,这里我们可以把1000放大到结果需要的精度,比如结果是1%精度,那么我们只需要把100*128,然后做除法,然后,结果的后面7位,就是小数点部分,而8位以后就是整数部分。
100*128=12800=3200H/63H=81H=10000001,切位后,整数1,小数点后面*100/128=0.01(四舍五入)。
 楼主| 陶文韬 发表于 2018-10-24 17:49 | 显示全部楼层
tianxj01 发表于 2018-10-24 17:37
可以用浮点运算,这个和用什么芯片没什么关系,有关系的是某些芯片支持多位浮点运算(硬件),而大多数通 ...

多谢大佬解惑
antusheng 发表于 2018-10-25 10:50 | 显示全部楼层
加上小括号试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

12

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部