请教AVR作浮点运算精度问题?

[复制链接]
7099|11
 楼主| chenfengmcu 发表于 2010-1-15 13:04 | 显示全部楼层 |阅读模式
如果用AVR 来做浮点运算如  A =  23.123  B= 45.123    C= A/B 或C = A*B 最后C能保证在小数点后面3位吗? 如在16或32位单片机精度有什么区别?
HWM 发表于 2010-1-15 13:10 | 显示全部楼层
一般只保证有效位数,而不是小数点后几位。具体能有几个有效位,要看浮点数的尾数长度。
 楼主| chenfengmcu 发表于 2010-1-15 13:18 | 显示全部楼层
不太明白,我想精确到小数点后面三位,具体怎么实现?如果用定点在作除法时就不能保证了。
HWM 发表于 2010-1-15 13:41 | 显示全部楼层
不太明白,我想精确到小数点后面三位,具体怎么实现?如果用定点在作除法时就不能保证了。
chenfengmcu 发表于 2010-1-15 13:18

这样讲吧,如果二进制为16位,相当于十进制5位。按五位有效位看,有

1.2345
12.345
123.34
1234.5

同样是五位有效位(十六位二进制表示),但其小数点后的位数却各不相同。
 楼主| chenfengmcu 发表于 2010-1-15 13:47 | 显示全部楼层
是的, 如果把所有的都做成如  12.234  12.000  的这样的除法结果能有小数点后3位吗?
HWM 发表于 2010-1-15 13:53 | 显示全部楼层
12.234 *12.000 结果就不再是 XX.XXX 的了。
 楼主| chenfengmcu 发表于 2010-1-15 14:10 | 显示全部楼层
那怎么办呀,失去精度没法用了呀?
HWM 发表于 2010-1-15 14:21 | 显示全部楼层
本帖最后由 HWM 于 2010-1-15 14:22 编辑

放心,AVR中的浮点数为32位二进制。有效位数有八位(尾数24位以上),适当处理应该没问题。
 楼主| chenfengmcu 发表于 2010-1-15 14:26 | 显示全部楼层
看了一些资料,好像没多大问题,非常感谢你的回复。
HWM 发表于 2010-1-15 14:47 | 显示全部楼层
虽然可能没有大问题,但需要明白只能保证“有效位数”,而非“小数点后位数”。所以要“适当处理”。
cool_coder 发表于 2010-1-15 23:28 | 显示全部楼层
应该重温一遍计算机原理,尤其是浮点数运算的原理。
李冬发 发表于 2010-1-16 11:51 | 显示全部楼层
LZ更需要加强的是数学。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

25

帖子

1

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