技术论坛

实数相乘得出以外结果请教

作者 主题
奇侠

经验值: 9763
发帖数: 1926
精华帖: 1
主题:【求助】实数相乘得出以外结果请教
推荐帖


只看楼主 楼主 2018-05-25 20:43:37

今天模拟一个正在使用的程序,无意中发现,两个实数相乘出现以外的结果,是什么原因?哪位大咖见到过?请看附件:

REAL11.gif

DB113.DBD32在程序中乘以1.3就得到红线框中的结果。



越学越不会
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1483889&b_id=4&s_id=0&num=13

版主

经验值: 76183
发帖数: 19138
精华帖: 378
回复:实数相乘得出以外结果请教


只看楼主 12楼 2018-06-06 11:21:52
以下是引用zzql在2018-06-05 21:08:28的发言 >10楼

斑竹请看原程序。

REAL2.GIF

假如如您所说,经过多次运算溢出了,就显示这样的结果吗?

我看了一下,大约经过1秒左右,就不变化了。

再回斑竹,如果只计算一次,结果是对的。计算多次是程序不够严谨所致。

以下是引用Zane在2018-06-03 20:44:48的发言 >8楼:是不是就是1.3的n次...

引用8楼详细内容:

是不是就是1.3的n次方了?那不是分分钟溢出了吗?

以下是引用zzql在2018-06-03 17:33:14的发言 >7楼:谢斑竹,两个实数相...

引用7楼详细内容:

谢斑竹,两个实数相乘,一个是数据块中定义为real类型的实数(当时里面的实际值是1.0),另一个直接输入的1.3,经过多次相乘就成了这样的结果。斑竹能否试一下?

补充:在模拟测试中,可以看到,乘积不断地变化,直到变成这个样子,就不再变化了。

以下是引用Zane在2018-06-02 17:23:44的发言 >6楼:多次计算应该没问...

引用6楼详细内容:

多次计算应该没问题的,楼主前个帖子的1.3说是直接值是什么意思?

以下是引用zzql在2018-06-02 16:51:06的发言 >5楼:向各位汇报:再次...

引用5楼详细内容:

向各位汇报:再次模拟了那段程序,发现,由于设计不严谨,导致程序运行了多次,也就是每个扫描周期运行计算一次,在模拟中可以看到,数据经过多次运算后,就成了现在的结果,当时算的是1.3*1.0.数据类型没有问题。请问各位,在这种情况下,出现这种计算结果正常吗?谢谢。

以下是引用自控龙龙在2018-05-29 10:32:11的发言 >:这种情况多数是...

引用详细内容:

这种情况多数是数据类型不对应

你的程序事实上形成了1.3的n次方运算,导致溢出,这是楼主在PLC扫描机制下如何实现运算的不理解造成的,尤其是迭代或递归运算 如:


A=A+B

A=A*B

等等,类似的计算


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
版主

经验值: 76183
发帖数: 19138
精华帖: 378
回复:实数相乘得出以外结果请教
推荐帖


只看楼主 1楼 2018-05-26 00:00:04

应该是有个数据非法了,不是浮点格式的数据


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
至圣

经验值: 43587
发帖数: 15780
精华帖: 61
回复:实数相乘得出以外结果请教
推荐帖


只看楼主 2楼 2018-05-27 15:28:37

如版主所说,赋值时数据格式错了。你把你的程序在线监视然后截图上来。


活到老,学到老!为了生活学习吧!
以下网友喜欢您的帖子:

  
奇侠

经验值: 9763
发帖数: 1926
精华帖: 1
回复:实数相乘得出以外结果请教
推荐帖


只看楼主 楼主 3楼 2018-05-28 20:21:25
以下是引用zhangli0在2018-05-27 15:28:37的发言 >

如版主所说,赋值时数据格式错了。你把你的程序在线监视然后截图上来。

回二位斑竹,当时算的是1.0*1.3,得出来就是这样了,1.0在数据块中,数据类型为real,1.3是直接数值。

明天我再试一下,有进展再向二位汇报。谢谢。


越学越不会
以下网友喜欢您的帖子:

  
奇侠

经验值: 5889
发帖数: 796
精华帖: 1
回复:实数相乘得出以外结果请教


只看楼主 4楼 2018-05-29 10:32:11

这种情况多数是数据类型不对应


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 9763
发帖数: 1926
精华帖: 1
回复:实数相乘得出以外结果请教


只看楼主 楼主 5楼 2018-06-02 16:51:06
以下是引用自控龙龙在2018-05-29 10:32:11的发言 >

这种情况多数是数据类型不对应

向各位汇报:再次模拟了那段程序,发现,由于设计不严谨,导致程序运行了多次,也就是每个扫描周期运行计算一次,在模拟中可以看到,数据经过多次运算后,就成了现在的结果,当时算的是1.3*1.0.数据类型没有问题。请问各位,在这种情况下,出现这种计算结果正常吗?谢谢。


越学越不会
以下网友喜欢您的帖子:

  
版主

经验值: 76183
发帖数: 19138
精华帖: 378
回复:实数相乘得出以外结果请教


只看楼主 6楼 2018-06-02 17:23:44
以下是引用zzql在2018-06-02 16:51:06的发言 >5楼

向各位汇报:再次模拟了那段程序,发现,由于设计不严谨,导致程序运行了多次,也就是每个扫描周期运行计算一次,在模拟中可以看到,数据经过多次运算后,就成了现在的结果,当时算的是1.3*1.0.数据类型没有问题。请问各位,在这种情况下,出现这种计算结果正常吗?谢谢。

以下是引用自控龙龙在2018-05-29 10:32:11的发言 >:这种情况多数是数据...

引用详细内容:

这种情况多数是数据类型不对应

多次计算应该没问题的,楼主前个帖子的1.3说是直接值是什么意思?


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
奇侠

经验值: 9763
发帖数: 1926
精华帖: 1
回复:实数相乘得出以外结果请教


只看楼主 楼主 7楼 2018-06-03 17:33:14
以下是引用Zane在2018-06-02 17:23:44的发言 >6楼

多次计算应该没问题的,楼主前个帖子的1.3说是直接值是什么意思?

以下是引用zzql在2018-06-02 16:51:06的发言 >5楼:向各位汇报:再次模...

引用5楼详细内容:

向各位汇报:再次模拟了那段程序,发现,由于设计不严谨,导致程序运行了多次,也就是每个扫描周期运行计算一次,在模拟中可以看到,数据经过多次运算后,就成了现在的结果,当时算的是1.3*1.0.数据类型没有问题。请问各位,在这种情况下,出现这种计算结果正常吗?谢谢。

以下是引用自控龙龙在2018-05-29 10:32:11的发言 >:这种情况多数是数据...

引用详细内容:

这种情况多数是数据类型不对应

谢斑竹,两个实数相乘,一个是数据块中定义为real类型的实数(当时里面的实际值是1.0),另一个直接输入的1.3,经过多次相乘就成了这样的结果。斑竹能否试一下?

补充:在模拟测试中,可以看到,乘积不断地变化,直到变成这个样子,就不再变化了。


越学越不会
以下网友喜欢您的帖子:

  
版主

经验值: 76183
发帖数: 19138
精华帖: 378
回复:实数相乘得出以外结果请教


只看楼主 8楼 2018-06-03 20:44:48
以下是引用zzql在2018-06-03 17:33:14的发言 >7楼

谢斑竹,两个实数相乘,一个是数据块中定义为real类型的实数(当时里面的实际值是1.0),另一个直接输入的1.3,经过多次相乘就成了这样的结果。斑竹能否试一下?

补充:在模拟测试中,可以看到,乘积不断地变化,直到变成这个样子,就不再变化了。

以下是引用Zane在2018-06-02 17:23:44的发言 >6楼:多次计算应该没问题...

引用6楼详细内容:

多次计算应该没问题的,楼主前个帖子的1.3说是直接值是什么意思?

以下是引用zzql在2018-06-02 16:51:06的发言 >5楼:向各位汇报:再次模...

引用5楼详细内容:

向各位汇报:再次模拟了那段程序,发现,由于设计不严谨,导致程序运行了多次,也就是每个扫描周期运行计算一次,在模拟中可以看到,数据经过多次运算后,就成了现在的结果,当时算的是1.3*1.0.数据类型没有问题。请问各位,在这种情况下,出现这种计算结果正常吗?谢谢。

以下是引用自控龙龙在2018-05-29 10:32:11的发言 >:这种情况多数是数...

引用详细内容:

这种情况多数是数据类型不对应

是不是就是1.3的n次方了?那不是分分钟溢出了吗?


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
奇侠

经验值: 9763
发帖数: 1926
精华帖: 1
回复:实数相乘得出以外结果请教


只看楼主 楼主 9楼 2018-06-04 20:49:25
以下是引用Zane在2018-06-03 20:44:48的发言 >8楼

是不是就是1.3的n次方了?那不是分分钟溢出了吗?

以下是引用zzql在2018-06-03 17:33:14的发言 >7楼:谢斑竹,两个实数相...

引用7楼详细内容:

谢斑竹,两个实数相乘,一个是数据块中定义为real类型的实数(当时里面的实际值是1.0),另一个直接输入的1.3,经过多次相乘就成了这样的结果。斑竹能否试一下?

补充:在模拟测试中,可以看到,乘积不断地变化,直到变成这个样子,就不再变化了。

以下是引用Zane在2018-06-02 17:23:44的发言 >6楼:多次计算应该没问题...

引用6楼详细内容:

多次计算应该没问题的,楼主前个帖子的1.3说是直接值是什么意思?

以下是引用zzql在2018-06-02 16:51:06的发言 >5楼:向各位汇报:再次...

引用5楼详细内容:

向各位汇报:再次模拟了那段程序,发现,由于设计不严谨,导致程序运行了多次,也就是每个扫描周期运行计算一次,在模拟中可以看到,数据经过多次运算后,就成了现在的结果,当时算的是1.3*1.0.数据类型没有问题。请问各位,在这种情况下,出现这种计算结果正常吗?谢谢。

以下是引用自控龙龙在2018-05-29 10:32:11的发言 >:这种情况多数是数...

引用详细内容:

这种情况多数是数据类型不对应

谢版主,明天把程序截图呈上,请版主解惑。
越学越不会
以下网友喜欢您的帖子:

  
奇侠

经验值: 9763
发帖数: 1926
精华帖: 1
回复:实数相乘得出以外结果请教


只看楼主 楼主 10楼 2018-06-05 21:08:28
以下是引用Zane在2018-06-03 20:44:48的发言 >8楼

是不是就是1.3的n次方了?那不是分分钟溢出了吗?

以下是引用zzql在2018-06-03 17:33:14的发言 >7楼:谢斑竹,两个实数相...

引用7楼详细内容:

谢斑竹,两个实数相乘,一个是数据块中定义为real类型的实数(当时里面的实际值是1.0),另一个直接输入的1.3,经过多次相乘就成了这样的结果。斑竹能否试一下?

补充:在模拟测试中,可以看到,乘积不断地变化,直到变成这个样子,就不再变化了。

以下是引用Zane在2018-06-02 17:23:44的发言 >6楼:多次计算应该没问题...

引用6楼详细内容:

多次计算应该没问题的,楼主前个帖子的1.3说是直接值是什么意思?

以下是引用zzql在2018-06-02 16:51:06的发言 >5楼:向各位汇报:再次...

引用5楼详细内容:

向各位汇报:再次模拟了那段程序,发现,由于设计不严谨,导致程序运行了多次,也就是每个扫描周期运行计算一次,在模拟中可以看到,数据经过多次运算后,就成了现在的结果,当时算的是1.3*1.0.数据类型没有问题。请问各位,在这种情况下,出现这种计算结果正常吗?谢谢。

以下是引用自控龙龙在2018-05-29 10:32:11的发言 >:这种情况多数是数...

引用详细内容:

这种情况多数是数据类型不对应

斑竹请看原程序。

REAL2.GIF

假如如您所说,经过多次运算溢出了,就显示这样的结果吗?

我看了一下,大约经过1秒左右,就不变化了。

再回斑竹,如果只计算一次,结果是对的。计算多次是程序不够严谨所致。


越学越不会
以下网友喜欢您的帖子:

  
奇侠

经验值: 8560
发帖数: 3432
精华帖: 56
回复:实数相乘得出以外结果请教


只看楼主 11楼 2018-06-06 10:53:57
以下是引用zzql在2018-06-05 21:08:28的发言 >10楼

斑竹请看原程序。

REAL2.GIF

假如如您所说,经过多次运算溢出了,就显示这样的结果吗?

我看了一下,大约经过1秒左右,就不变化了。

再回斑竹,如果只计算一次,结果是对的。计算多次是程序不够严谨所致。

以下是引用Zane在2018-06-03 20:44:48的发言 >8楼:是不是就是1.3的n次...

引用8楼详细内容:

是不是就是1.3的n次方了?那不是分分钟溢出了吗?

以下是引用zzql在2018-06-03 17:33:14的发言 >7楼:谢斑竹,两个实数相...

引用7楼详细内容:

谢斑竹,两个实数相乘,一个是数据块中定义为real类型的实数(当时里面的实际值是1.0),另一个直接输入的1.3,经过多次相乘就成了这样的结果。斑竹能否试一下?

补充:在模拟测试中,可以看到,乘积不断地变化,直到变成这个样子,就不再变化了。

以下是引用Zane在2018-06-02 17:23:44的发言 >6楼:多次计算应该没问...

引用6楼详细内容:

多次计算应该没问题的,楼主前个帖子的1.3说是直接值是什么意思?

以下是引用zzql在2018-06-02 16:51:06的发言 >5楼:向各位汇报:再次...

引用5楼详细内容:

向各位汇报:再次模拟了那段程序,发现,由于设计不严谨,导致程序运行了多次,也就是每个扫描周期运行计算一次,在模拟中可以看到,数据经过多次运算后,就成了现在的结果,当时算的是1.3*1.0.数据类型没有问题。请问各位,在这种情况下,出现这种计算结果正常吗?谢谢。

以下是引用自控龙龙在2018-05-29 10:32:11的发言 >:这种情况多数是...

引用详细内容:

这种情况多数是数据类型不对应

假设你的CPU是10ms一个周期,按你这样计算1s就是计算100次。如果db111.dbx12.3是单周期的脉冲还好,如果是常1,那么1.3的100次方,你想一下有多少,很快就溢出了。


If anything can go wrong, it will.
以下网友喜欢您的帖子:

  
奇侠

经验值: 9763
发帖数: 1926
精华帖: 1
回复:实数相乘得出以外结果请教


只看楼主 楼主 13楼 2018-06-06 20:19:18
以下是引用Zane在2018-06-06 11:21:52的发言 >12楼

你的程序事实上形成了1.3的n次方运算,导致溢出,这是楼主在PLC扫描机制下如何实现运算的不理解造成的,尤其是迭代或递归运算 如:


A=A+B

A=A*B

等等,类似的计算

以下是引用zzql在2018-06-05 21:08:28的发言 >10楼:斑竹请看原程序。R...

引用10楼详细内容:

斑竹请看原程序。

REAL2.GIF

假如如您所说,经过多次运算溢出了,就显示这样的结果吗?

我看了一下,大约经过1秒左右,就不变化了。

再回斑竹,如果只计算一次,结果是对的。计算多次是程序不够严谨所致。

以下是引用Zane在2018-06-03 20:44:48的发言 >8楼:是不是就是1.3的n次...

引用8楼详细内容:

是不是就是1.3的n次方了?那不是分分钟溢出了吗?

以下是引用zzql在2018-06-03 17:33:14的发言 >7楼:谢斑竹,两个实数...

引用7楼详细内容:

谢斑竹,两个实数相乘,一个是数据块中定义为real类型的实数(当时里面的实际值是1.0),另一个直接输入的1.3,经过多次相乘就成了这样的结果。斑竹能否试一下?

补充:在模拟测试中,可以看到,乘积不断地变化,直到变成这个样子,就不再变化了。

以下是引用Zane在2018-06-02 17:23:44的发言 >6楼:多次计算应该没问...

引用6楼详细内容:

多次计算应该没问题的,楼主前个帖子的1.3说是直接值是什么意思?

以下是引用zzql在2018-06-02 16:51:06的发言 >5楼:向各位汇报:再...

引用5楼详细内容:

向各位汇报:再次模拟了那段程序,发现,由于设计不严谨,导致程序运行了多次,也就是每个扫描周期运行计算一次,在模拟中可以看到,数据经过多次运算后,就成了现在的结果,当时算的是1.3*1.0.数据类型没有问题。请问各位,在这种情况下,出现这种计算结果正常吗?谢谢。

以下是引用自控龙龙在2018-05-29 10:32:11的发言 >:这种情况多数是...

引用详细内容:

这种情况多数是数据类型不对应

谢斑竹及网友.原因找到了。再请问:溢出就显示这样的结果吗?


越学越不会
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
实数相乘得出以外结果请教
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。