1、浮点数的表示范围:

首先明确一点,指数是用移码表示的;

指数全1,尾数全0表示无穷大,符号位0或1表示正无穷和负无穷两种情况;

指数全0,尾数全0表示0,同样由符号位决定是正0还是负0;

所以浮点数的指数表示移码范围是1~254,则原码表示范围是-126~+127;

双精度可以类比;

这样来看,1)浮点数最大的时候应该有:指数全1(254),尾数全1(包含一个隐含位,且用原码表示),即:(1+1-2^-23)*2^(254-127)=2^128-2^104;

2)浮点数最小的时候即将前面的符号位改成负号即可;

3)绝对值最小的时候:指数为1(-126),尾数全0,即:2^-126;

综上所述,也就意味着浮点数在0的邻域内有一部分是不能表示的,如果出现了的话,就表示溢出,在这个范围内为负下溢和正下溢;

而如果浮点数绝对值大于最大绝对值,则表示负上溢和正上溢;

下溢的时候,浮点数趋于0,将之作为机器零处理;上溢的时候则需要中断运算操作,进行溢出处理;

2、浮点数的计算:

第一步:对阶操作,即将小阶的浮点数的尾数右移(补码算术移位:正数补0,负数左移补0、右移补1),直至二者阶数相等;

注意,在右移过程中可能会出现低位丢失,故而要进行舍入操作,有两种方式:

1)如果舍掉的是0,则不做操作,如果舍掉的是1,则在尾数末尾加1;

2)不论是丢1还是丢0,都将最低位置为1;

第二步:尾数(不考虑IEEE754的话,一般要用补码表示并进行运算)求和;

第三步:对求和之后的数字进行规格化,即如果不符合补码规格化数的要求,要进行左规和右规操作;

第四步:在右规的时候可能要进行舍入操作;

第五步:溢出判断;即判断有无上溢或者下溢,再选择进行中断或者机器零处理;

****************************************

做第三套题第12题的时候,遇到了对阶右规和尾数求和溢出右规两种情况,虽然书上说两个都是补码的算术右移,但是实际却还是有一定的区别的,不过通过思考发现其实是包含符号位的算术右移,即如果是负数的话,补码算术右移要补1,这里的补1是在符号位前面补1,包含符号位都要右移一位;屡试不爽;