Fx3U浮点数运算问题 点击:833 | 回复:10



smhacker

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 15回
  • 年度积分:0
  • 历史总积分:97
  • 注册:2012年7月15日
发表于:2022-03-25 19:36:09
楼主

最近在用Fx3U结构化工作做一个项目,发现用浮点数运算的时候会出现计算误差,如下图:

有误差.png

45.0/0.002结果应该是22450.0,但是结果是22499,为了排除是运算过程中的问题,我加了一个运算中转,如下图:

这里能看出转换函数输入值是22500.0(也就是t_float的值),但是浮点转整数后却变成了22499???于是我觉得可能是精度问题,想验证一下,就把脉冲当量参数缩小10倍,变成0.0002,但是奇迹出现了,转换结果又与输入值是一样的,如下图(一个是运算中转的,一个是直接运算转换的):

我用了DINT函数和REAL_TO_DINT_E函数都试过,结果是一样的。实在是令人费解,希望高人指点迷津!





楼主最近还看过



yuanle

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 10219回
  • 年度积分:3353
  • 历史总积分:48938
  • 注册:2005年4月22日
发表于:2022-03-27 10:10:18
1楼

我个人认为这是三菱对于指令的底层处理问题,原因在于其对于借位的处理,我认为三菱不会对其进行修正。

Snap1.JPG

当发生借位处理时,其后部小数被直接丢弃了,而不是和其他品牌一样进行了四舍五入。

sanp1.JPG

可以看到,当除数为0.002时,发生了借位,因此小数被丢弃,所以实际转换结果成为了22499,这是INT转换指令的处理问题,和浮点数的运算指令无关。

同样,当除数为0.002时,此时运算结果并不产生小数,所以没有出现借位,所以结果正确了。

Snap2.JPG


我认为,用户可以对M8021进行判断,如果M8021为ON时,对转换结果+1处理。但是这个操作存在BUG,更佳的方式是编程将浮点数进行四舍五入后进行转换为整数的操作,因为可能存在小数小于0.5的情况,如下图,这种情况下+1显然会存在较大的误差。

Snap3.JPG


HAVE FUN!

wtq_24

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 13回
  • 年度积分:0
  • 历史总积分:77
  • 注册:2003年3月30日
发表于:2022-03-29 10:41:36
2楼

学习

w20120904

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:53
  • 注册:2012年9月04日
发表于:2022-03-30 17:07:36
3楼

学习

z317858590

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 14回
  • 年度积分:0
  • 历史总积分:79
  • 注册:2012年8月06日
发表于:2022-03-30 20:50:36
4楼

学习学习

mindman

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 9回
  • 年度积分:0
  • 历史总积分:56
  • 注册:2022年3月13日
发表于:2022-04-13 20:37:57
5楼

不错

在谁那里啊

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 46回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2019年9月28日
发表于:2022-04-14 12:47:34
6楼

挺不错的东西,看看看看按

世事如棋!

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 796回
  • 年度积分:3454
  • 历史总积分:6074
  • 注册:2011年2月28日
发表于:2022-06-11 10:13:24
7楼

学习一下

世事如棋!

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 796回
  • 年度积分:3454
  • 历史总积分:6074
  • 注册:2011年2月28日
发表于:2022-06-11 10:13:24
8楼

学习一下

天涯笑逐尘

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 74回
  • 年度积分:0
  • 历史总积分:140
  • 注册:2013年4月24日
发表于:2022-06-12 09:39:32
9楼

我用GX WORKS2 运算45.0/0.002 没问题 结果是22499.998

 但是无论直接输入E0.0002 还是用0.002/10 结果都是2.250e+005  都不是楼主的22500

求解

郭冬冬

  • 精华:0帖
  • 求助:0帖
  • 帖子:19帖 | 619回
  • 年度积分:91
  • 历史总积分:147000
  • 注册:2022年4月24日
发表于:2022-06-18 09:53:18
10楼

学习一下


热门招聘
相关主题

官方公众号

智造工程师