打印

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

[复制链接]
5687|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

同样是五位有效位(十六位二进制表示),但其小数点后的位数却各不相同。

使用特权

评论回复
5
chenfengmcu|  楼主 | 2010-1-15 13:47 | 只看该作者
是的, 如果把所有的都做成如  12.234  12.000  的这样的除法结果能有小数点后3位吗?

使用特权

评论回复
6
HWM| | 2010-1-15 13:53 | 只看该作者
12.234 *12.000 结果就不再是 XX.XXX 的了。

使用特权

评论回复
7
chenfengmcu|  楼主 | 2010-1-15 14:10 | 只看该作者
那怎么办呀,失去精度没法用了呀?

使用特权

评论回复
8
HWM| | 2010-1-15 14:21 | 只看该作者
本帖最后由 HWM 于 2010-1-15 14:22 编辑

放心,AVR中的浮点数为32位二进制。有效位数有八位(尾数24位以上),适当处理应该没问题。

使用特权

评论回复
9
chenfengmcu|  楼主 | 2010-1-15 14:26 | 只看该作者
看了一些资料,好像没多大问题,非常感谢你的回复。

使用特权

评论回复
10
HWM| | 2010-1-15 14:47 | 只看该作者
虽然可能没有大问题,但需要明白只能保证“有效位数”,而非“小数点后位数”。所以要“适当处理”。

使用特权

评论回复
11
cool_coder| | 2010-1-15 23:28 | 只看该作者
应该重温一遍计算机原理,尤其是浮点数运算的原理。

使用特权

评论回复
12
李冬发| | 2010-1-16 11:51 | 只看该作者
LZ更需要加强的是数学。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

25

帖子

1

粉丝