作者 | 主题 |
---|---|
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
|