为什么两个实数的值相减的结果应该是37.21,但是实际显示出来却是37.20999。原本是两个寄存器之间相减的,两个实数寄存器我都取过整。还是不行,后来我直接输入两个实数数值,还是一样的结果。百思不得其解,手册上说只有计算溢出的时候才会出现100000+1=100000这样的情况,可是我这个实数值很小,应该也不存在溢出的情况啊。求大神解惑,不胜感激!!
版主推荐答案
应该是现在的PLC浮点运算的问题。记得以前的浮点运算很少出现0.1的偏差问题,只从ARM内核大行其道后,到处看到浮点运算出现0.1偏差的问题。
讲真,这0.1的偏差我觉得很恶心。
真相就是以前的浮点运算是用IEE754算法计算的,基本上不会出现0.1偏差,ARM内核是使用高速的浮点运算硬件内核,为了快速计算并不是采用编程的算法(整数浮点数分开独立计算、浮点数固定次数循环计算精度),这样就会导致精度不相同从而出现偏差。
查看完整帖子:
http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1636223&bid=64
提问者对于答案的评价:
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc279635.html