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

[复制链接]
 楼主| wwd8888 发表于 2019-5-29 12:21 | 显示全部楼层 |阅读模式
float t=10.23;
uint  v;

v=f*100;
SendUart(v>>8);SendUart(v);
串口收到的数据是0x03fe,(1022)而不是0x03FF;f=10.23001、f=10.22、10.24不会出错,f*1000也不会错,10.23*100这个值怎么会少了1呢
叶春勇 发表于 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单片机做浮点运算,效率太低。
linqing171 发表于 2019-5-30 00:13 | 显示全部楼层
浮点数本来就有损的,差个1正常啊。
ayb_ice 发表于 2019-5-30 08:27 | 显示全部楼层
太正常了,
应该是浮点不能精确的表示10.23
airwill 发表于 2019-6-9 08:04 | 显示全部楼层
嗯,  大家都说得很好, 要注意浮点数并不是个精确值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

129

帖子

2

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

10

主题

129

帖子

2

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