签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
为什么两个实数的值相减的结果应该是37.21,但是实际显示出来却是37.20999。原本是两个寄存器之间相减的,两个实数寄存器我都取过整。还是不行,后来我直接输入两个实数数值,还是一样的结果。百思不得其解,手册上说只有计算溢出的时候才会出现100000+1=100000这样的情况,可是我这个实数值很小,应该也不存在溢出的情况啊。求大神解惑,不胜感激!!
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1636223&b_id=64&s_id=0&num=12
应该是现在的PLC浮点运算的问题。记得以前的浮点运算很少出现0.1的偏差问题,只从ARM内核大行其道后,到处看到浮点运算出现0.1偏差的问题。
讲真,这0.1的偏差我觉得很恶心。
真相就是以前的浮点运算是用IEE754算法计算的,基本上不会出现0.1偏差,ARM内核是使用高速的浮点运算硬件内核,为了快速计算并不是采用编程的算法(整数浮点数分开独立计算、浮点数固定次数循环计算精度),这样就会导致精度不相同从而出现偏差。
是因为单精度浮点数的位数只有6位有效数字(23位)。使用的是二进制补码计算,结果常常是这样的。
没辙。
尽量避免浮点运算吧。
这是计算机计浮点数的共性。详细原理我也不知道。听得多见得多就信吧。实际上也没算差多少给你。跟整数运算不同。
不用浮点,用长整数。双精度的浮点运算会不会出现这种情况?有的plc支持双精度浮点数。
编程取值属性特重要!
多看多想多动手。
浮点数扩大倍数,转换成整数,然后在参与运算
来学习下,我觉得扩大倍数 转换成整数 挺实用的
的确也是经常见到这样的问题,所以有一点就是浮点数做比较时不能使用等于比较。
进来向大神学习了
学习了,谢谢!
改为整形,然后换回实型
一般都是取整了,,浮点数不参与计算。。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录