打印

KEIL4.00A,浮点数10.23出错!!!这现象见过吗

[复制链接]
1236|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wwd8888|  楼主 | 2019-5-29 12:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
叶春勇| | 2019-5-29 13:08 | 只看该作者
用32位浮点数表达 10.23其二进制格式为(1+2338324/8388608)*2^3=‭‭10.229999542236328125
10.23用二级制无法准确表达,是个无理数或循环数。

使用特权

评论回复
板凳
wsmysyn| | 2019-5-29 13:25 | 只看该作者
存储的时候损失精度了,

你存的是10.23,但是实际上只是10.22999.........的近似,×100取整之后,小数都没了,不他会自动四舍五入的。。。所以是1022

使用特权

评论回复
地板
叶春勇| | 2019-5-29 13:35 | 只看该作者
51单片机别用浮点数,化成整数
1023*f/100=1023*2.56*f/256=2618.88*f/256=2619*f/256
除以256可以用移位来搞定
51单片机做浮点运算,效率太低。

使用特权

评论回复
5
linqing171| | 2019-5-30 00:13 | 只看该作者
浮点数本来就有损的,差个1正常啊。

使用特权

评论回复
6
ayb_ice| | 2019-5-30 08:27 | 只看该作者
太正常了,
应该是浮点不能精确的表示10.23

使用特权

评论回复
7
airwill| | 2019-6-9 08:04 | 只看该作者
嗯,  大家都说得很好, 要注意浮点数并不是个精确值

使用特权

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

本版积分规则

10

主题

129

帖子

2

粉丝