#22003/9/1 17:43:20
首先,你的表达式的意思无非就是要取得不能被80除的余数。
实际上你的表达式可以这样写成这样:
z_ver=z_gsm mod 80
表达同样的意思而且不会出错!
还有你得到的值应该是个整数,那你可以写成这样!
z_ver=z_gsm-int(z_gsm/80)*80
当然写成最上面的是最简单明了的!
至于最下面你说的误差问题,事实上是由于进制问题造成的,我们习惯上都是用10进制进行计算,很可惜,电脑却不是10进制的,而是二进制的!(事实上正因为电脑采用二进制才发明成功)
你说的26/80=0.325在10进制中的确不是个无限循环小数。很可惜,在二进制表达中这个数就是无限循环小数。那么就很好理解这个误差的产生了!
比如你说的5555,结果小数应该是0.4375,用二进制表达正好是0.0111,不是循环小数,自然没有误差了。
事实上,在涉及复杂计算过程中,比较两个实数是否相等是很难的,也许在10进制中两个数的最终计算结果应该完全相等,但在二进制中由于进制不同带来的误差是有不同的,这时候判断两个值是否相等不是用
if a=b then
而是
if a-b<0.00007 then
来判断两者的数是否在误差许可的范围内!
我只能点到为止,二进制的介绍可以去网上查查相关内容!
编辑历史:[这消息被whoisspider编辑过(编辑时间2003-09-01 17:45:00)]
[这消息被whoisspider编辑过(编辑时间2003-09-01 17:47:49)]