概述
推理:关于浮点数的表示与运算章节中,补码规格化后的负数所能表示的范围
一、记住形式1.0xx,现要找最大的负数
二、假设现在仅4位(符号位占一位),毫无疑问就是-0.001,原码表示就是1.001(最低位为0时-0在原码中也是0),可是然后规格化得1.111,不符合形式
三、(推理)这个数取反+1要变成1.0xx,那么原码必须是1.1xx(因为若原码是1.0xx,取反加一后还要是1.0,则只有1.000,但个数是0不是负数)
四、由上一步可知最大的负数应尝试取到1.100,可是补码是1.111还是不符合,因此再尝试1.101,此时补码是1.011,得到结果
结论:规格化浮点数的补码规格化后负数为1.0xx形式且其最大值表示为1.01……1(不仅四位的话中间……处全补1)
反思:为何形式是1.0xx呢?(1是负数符号没毛病,但为何就不能是1.1?)
反证:若取1.1xx,则可取1.111,这个补码的原码是1.001,表示的数是-0.001,这时问题就出现了,究竟何为规格化?
规格化:通过调整一个非规格化浮点数的尾数和阶码的大小,使非零的浮点数在尾数的最高数位上保证是一个有效值,当基数为2时,尾数M的绝对值满足1/2<=|M|<=1
判断:凭最后一句尾数M的要求就可以理解为何形式是1.0xx了
再问:为何使非零的浮点数在尾数的最高数位上保证是一个有效值,尾数M绝对值就是大于1/2?(或者应该反过来说,为何尾数M绝对值就是大于1/2,可以保证最高数有效?)
易知:这是规定而来的,试想若能小于1/2,则最高位就是0了(尾数都是小数部分,相当于二进制下小数点后一位),那又怎么知道到第几位会有效?若设为>=1/4,那为何不是1/8呢?所以大于等于1/2是有道理的,可以保证最高位是1
延伸:这就不难理解了
原码与补码的正数规格化形式都是0.1xx,MAX=0.111,MIN=0.100(范围就是1/2到(1-2^-n))
负数时原码可以表示的形式是1.1xx,因为最大值1.100,最小值1.111(范围就是(1-2^-n)到1/2)
负数时补码可以表示的形式是1.0xx,因为最大值1.011,最小值1.000(范围是-1到-(1/2+2^-n)),注意1.000是-1的补码,补码中负0 是表示负得最多的数(即最小的负数)
最后
以上就是合适书本为你收集整理的计算机组成浮点数补码规格化负数表示范围的全部内容,希望文章能够帮你解决计算机组成浮点数补码规格化负数表示范围所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复