real数据类型为什么只显示4位小数
郑志武
发布于2013-03-05 23:33
8
0
标签:
real数据类型为什么只显示4位小数?如图所示,dbd6和dbd40都是real类型。我是采用dbd6+dbd40所得的和再放入到dbd6然而dbd40有若干位小数,而相加后的和也就是dbd6只有4位小数,这样造成了很大误差,请问问题出现在哪里?如何将dbd6也设置为显示多位的小数?
图片说明: 1,1 2,11
佳答案
s7-300/400里的浮点数是符号ieee754标准的单精度浮点数,占4个字节,有效数字不可能很多,当一个比较大的浮点数加上一个比较小的浮点数就可能产生比较大的误差,所以浮点数计算的一个常识就是要避免大小悬殊的数相加,你这应该是属于不断的累加吧,如果是给你推荐一个算法
增加一个变量用于保存计算误差,比如是dbd100,那么计算过程如下
ld0=dbd40+dbd100把上一次的误差累加进去
ld4=dbd6+ld0这样当前累加量和上一次计算丢失的值都加进去
dbd100=ld4-dbd6+ld0计算一下本次累加误差丢失的值
dbd6=ld4更新当前累加值
这个算法的核心就在于,如果要加的数比较小,和大数相加会丢失数值,丢失的数值会和下一次的值累加,这样当达到一定的程度,就可以累加到大数里了