如题,使用50ms中断,瞬时流量/72000,然后进行实数累加。出现意外,因为瞬时值太小,导致累计值与瞬时值相加时基本忽略了瞬时值。换思路,改为瞬时流量相加,结果/72000,问题解决,累计值正常。但一段时间后,累计值在很大的时候,将其与瞬时流量相加时,因为差距过大,又会将其忽略,累计流量长时间不变。有没有遇到类似情况的?如果没有别的思路,只能通过多段累计来实现了。(以前的程序不想去修改)
最佳答案
这个主要是算法问题,你的最基本算法是没有,问题的,但是 你忽视了一个浮点数的问题,浮点数的有效位数是6位,比如,当你的累积重量达到 9999999.0后 ,你的50MS累积量为0.01时,2数相加,结果还是9999999.0,因为有效位数的原因被省去了,为了改变这个情况,你可以,将没50MS的累积量先放到另外一个分量内存中,累积到一定量以上后,再加到重量上去。然后这个分量再清零。但是这种方法还是会出现大数加小数结果被省去的情况,比如9999999999.9+10.0。10还是被省去了。
最终的解决办法 还是将总量分为整数和小数部分。
提问者对于答案的评价:
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc208156.html