b =

4008000000000000
>> a
a =
4007ffffffffffff
>>PS:可以看到还是有一点点的差异的,这就是误差的来源所在,这个应该属于舍入误差吧?那么,计算机究竟是怎样利用二进制做除法的呢?这种误差是怎样产生的?二进制除法:计算机中做二进制除法实质上是一直做减法的,相当于一直用被除数减去除数。如下面的例子: 98/5=1100010/101=19余3,过程如下:1100010除以101,先设置一个标记为mark,让mark初始停留在被除数的最高位,因为被除数有三个二进制位,故先让mark右移到第三位(从最左边数),这样就先变成了110(0010)/101,完了做减法110(0010)-101( 0000)=1(0010),则可知商为001(放在最终商的高位上),余数为1(0010),接着再按照这种方法往下做,1001(0)-101(0)(此时商已经变为001001,因为mark又向右移了3位)=100(0),此时再次做减法了,同时注意商的变化,1000-101(商为0010011)=011,最后得商为10011=19,余数为011=3.那么,在计算机中用double形式存储时,0.3=3fd3333333333333 0.1=3fb999999999999a,那么matlab又是怎样利用这样的存储形式做除法从而才导致结果的差异呢?一下为自己猜测:首先判断最高位的二进制位是否相同,相同上最高位则为0,不相同则为1.接下来开始做指数的运算,用被除数中代表e的那11位减去除数的11位,这里可能为负的啊,得10。最后进行尾数(52位)的运算,估计这里是利用二进制除法进行的计算。最最后,进行二进制到十进制的转换,而在这个计算的过程中由于计算步骤和舍入误差,会导致截断误差的存在!所以会结果不一样!