计算机是怎样利用二进制做除法的? 二进制除法计算器

今天用matlab试了一下,确实啊,才发现0.3/0.1和3的值确实不相等啊(当然是在计算机内存中存储的形式,以double形式)如下:format hex>> a=0.3/0.1;b=3
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位)的运算,估计这里是利用二进制除法进行的计算。最最后,进行二进制到十进制的转换,而在这个计算的过程中由于计算步骤和舍入误差,会导致截断误差的存在!所以会结果不一样!



  

爱华网本文地址 » http://www.aihuau.com/a/25101016/315974.html

更多阅读

我是怎样宣传和推广我的专利产品的 产品宣传推广方案

我是怎样宣传和推广我的产品的文化革命结束,我高中毕业,算是文盲吧。好在之后的时间,有机会涉足自然和社会的诸多科学领域,虽然不精,但是广博。我有十几项发明,其中两样被我开发出来,并推向市场。“一米线排队机”是其中一种,它很简单,但很

声明:《计算机是怎样利用二进制做除法的? 二进制除法计算器》为网友套對白分享!如侵犯到您的合法权益请联系我们删除