技术论坛

 【热门】现场调试“诡异”的浮点数

返回主题列表
作者 主题
feiwosicun
侠客

经验值:827
发帖数:97
精华帖:0
楼主    2023-09-04 13:36:25
主题:【热门】现场调试“诡异”的浮点数

案例来源:

曾经有一次去现场调试,做的是配方的应用,客户要求4种原料配方比例加起来,要满足100%才可以开机,

即配方比例1+配方比例2+配方比例3+配方比例4=100%,如果大于100%,或者小于100%,则无法开机。

每种原料的配方比例要求精度是小数点后3位,例如12.123。

本来以为挺简单,就把4个值,加起来做个比较就行了,然后诡异的事情就出现了。第一张图是在触摸屏上设的配方比例,总配方比例屏上显示的也是100%。但是,到程序里监控一看, 显示的99.99999,就是第二张图。这样就达不到开机条件了,当时真是愁死了。




后来,没有办法,加了个判断条件,总配方比例只要在99.9999和100.0001之间都允许开机,总算是解决了。

也是借这个案例,让论坛各位大神分析分析,为什么浮点数相加时会出现这种情况?我从现场调试来看,并不是所有时候相加时都会出现,是偶然事件。

天道酬勤~
万泉河
至圣

经验值:28584
发帖数:10819
精华帖:131
9楼    2023-09-06 09:49:19
精华帖  主题:回复:【热门】现场调试“诡异”的浮点数

浮点数的表达有一多半都是不精确的。 

你想啊, 一共32位,原本表达的整数只有2^32个。 那么当他用来表达无穷尽的浮点数的时候,就只有2^32个能准确了。 其中第一个是0.0。


所以教科书上讲的浮点数不能做等于号的比较,就是要你用大于和小于一个范围区间给框起来。 


做法完全正确!


但我认为你区间还可以再大一点。 比如99.9995-100.0005。才保险。 



微信公众号:PLC标准化编程,ZHO6371995
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。