quote:以下是引用Automann在2014-05-09 13:02:38的发言:quote:[b]以下是引用ktissot在2014-05-09 11:15:52的发言输入2147483647.0
accu1中的内容是4f000000。
根据浮点数的计算规则:4f000000对应的数是2147483648.0。和我们设定的不一致。
这个问题就是计算机处理浮点数精度时候产生的。
再比如:
从2147483584.0到2147483647.0,accu1中的内容都是4f000000
输入2147483583.0 accu1中的内容是4effffff,对应的dint是2147483520。
换言之:300系列plc,32位单精度浮点数,无法精确表达从2147483583.0到2147483647.0之间的每一个数。
这就像看一片湖水一样,你可以看到水和浪花,但是绝对看不到水分子。
“无法精确表达”最多就是转换有误差,而2147483584.0到2147483647.0不是精确表达的问题,而是不能转换的问题。
输入这个区间的数字,plc的accu1就是4f000000。
比如输入2147483647.0那么accu1就是4f000000。
第一:4f000000根据浮点数规则,表达的是2147483648.0,和输入是不一样的。plc所能表达的,和我们所设定的是不一致的,这个是计算机单精度浮点数自身造成的原因。
第二:在plc中4f000000是2147483648.0已经超出了对应dint数字的范围,当然就不能转换了。dint最大的数字是2147483647,plc理解的4f000000浮点数是2147483648.0已经超过了对应dint的范围,当然不能转换。所以ov和os置位。