如何避免两个相近的浮点数相减的时候计算出误差?
S7中,如何避免两个相近的浮点数相减的时候计算出误差? 比如0.4-0.398=0.002000004
我要对实际值和设定值的偏差进行记录,但没想到并不算大的数值,也会出现这样的情况,导致数据库里面记录下来的数据大多带有一个小尾巴,真是讨厌啊!
谁能给出一个比较好的处理方法?从PLC的角度。
问题补充:
---------------------------------------------------------------------------------------------------
目前我用PLCSIM模拟,问题肯定是存在的:
L MD 100
L MD 104
-R
T MD 108
NOP 0
L 4.000000e-001
L 3.980000e-001
-R
T MD 208
多次监控,计算结果分别如下:
0.4-0.399=0.001000017
0.4-0.397=0.002999991
0.4-0.396=0.004000008
0.4-0.395=0.004999995
0.4-0.3=0.09999999
1个回复
-
plc电工爱好者
碰到的问题,确实存在,我分别在模拟器和CPU315上试验了,结果确实。
但是思考半天也没想到一个万全之策。
倒是有一个特别绕弯的办法,我自己想出来也觉得不是很健全。不过暂且可以解决万老师提出的问题。下面我就说说,请各位不要见笑!也希望有人能提出更好的解决办法
首先编写一个fc3:
L #IN1
L #IN3
*R
T #TEM1
L #TEM1
TRUNC
T #TEM2
L #IN2
L #IN3
*R
T #TEM3
L #TEM3
TRUNC
T #TEM4
L #TEM2
L #TEM4
-D
T #TEM5
L #TEM5
DTR
T #TEM6
L #TEM6
L #IN3
/R
T #OUT
然后在OB1里面调用:
CALL FC 3
IN1:=MD100
IN2:=MD104
IN3:=1.000000e+004
OUT:=MD108
这样得出的结果就是想要的结果。
说白了,就是通过长整数来计算,转过来,再转过去2年前 我来评论