威纶通MT6070IH宏指令执行问题 点击:2261 | 回复:6



时空——王者之师

    
  • 精华:2帖
  • 求助:234帖
  • 帖子:481帖 | 4472回
  • 年度积分:66
  • 历史总积分:31282
  • 注册:2008年6月06日
发表于:2013-04-10 08:16:16
楼主
求助帖10分-已结帖

见图:

宏指令

macro_command main()
float a,b,c
GetData(a, "Local HMI", Lw, 0, 1)
GetData(b, "Local HMI", Lw, 2, 1)
c=a*b
SetData(c, "Local HMI", Lw, 4, 1)
end macro_command

计算结果有点误差

10000.5*110.7=1107055.35,怎么会有0.03的差别?

威纶通的赶紧来解释一下?



楼主最近还看过



时空——王者之师

  • 精华:2帖
  • 求助:234帖
  • 帖子:481帖 | 4472回
  • 年度积分:66
  • 历史总积分:31282
  • 注册:2008年6月06日
发表于:2013-04-10 09:14:03
1楼

又算了一些数,浮点值是不是数值越大,误差越大,当数值很大,带小数点时,连直接输入都不正常了!

simonwu675

  • 精华:0帖
  • 求助:3帖
  • 帖子:11帖 | 794回
  • 年度积分:0
  • 历史总积分:2856
  • 注册:2009年11月23日
发表于:2013-04-10 09:14:08
2楼

他们在相乘的时候,会先把数字转换成二进制进行运算,运算出结果后又再转换成浮点数,所以造成了误差~

建议把数字处理成整型再进行运算,出结果后再转回去,这样可以避免误差;就是乘个系数之类的。



jiangwei5945

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 24回
  • 年度积分:0
  • 历史总积分:36
  • 注册:2013年3月19日
发表于:2013-04-10 13:07:32
3楼

如果是都先乘以100,然后结果除以100后显示怎么样?

忠义--王者之师

  • 精华:0帖
  • 求助:0帖
  • 帖子:23帖 | 823回
  • 年度积分:2
  • 历史总积分:2023
  • 注册:2009年5月12日
发表于:2013-04-15 19:48:08
4楼

引用 jiangwei5945 的回复内容: 如果是都先乘以100,然后结果除以100后显示怎么样?



xjh8888

  • 精华:0帖
  • 求助:1帖
  • 帖子:8帖 | 60回
  • 年度积分:0
  • 历史总积分:464
  • 注册:2003年9月26日
发表于:2013-06-06 13:20:34
5楼

精度决定的,32为浮点数有效位数只有7位

apmdeper

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 33回
  • 年度积分:0
  • 历史总积分:171
  • 注册:2016年6月28日
发表于:2016-12-25 09:45:08
6楼

有效数只有7位是什么意思?


热门招聘
相关主题

官方公众号

智造工程师