csapp:浮点数的阶码为什么要用移码表示而不是补码?
日常生活中我们对小数进行加减法时,为了方便,通常先把它们的指数化成一致,再比较前面的数值部分;
比如1e-3与1e-1,我们化为1e-3和100e-3,这样就能很明显的得到结果 99e-3了
,同样,在计算机中亦是如此;
设想以单精度的浮点数为例,阶码有8位,能表示-128~127
之间的数字;而我们在对其阶码进行比较时,如果不偏置,那么0010xx和1000xx在计算机眼中就会认为后者较大,而其实后者是负数;所以这样的话,计算机得先把它们化成原码,再对其进行比较,比较繁琐;
而当浮点数的阶码采用移码的形式时(偏置127),即E=e-Bias (e∈[1,254],0和255是特殊的值,不呢能取),那么E∈[-126,127],所以浮点数阶码中储存的e全为正数,可直接比较,不用转换成原码再进行;而实际表示的浮点数的指数部分取值范围就是E的取值范围,所以浮点数的精度为-126~12;
补充一个问题:在观看CSAPP的视频时,里面有个学生提出:为什么这个偏置值要取2k-1-1呢?
教授的回答是:exp的取值范围为[1,254],而E作为最后小数的指数,它所表示的精度要对半分,非负数要占一般,正数要占一半,而exp只能取254个值,自然最后E的范围只能为[-126,127],只有这样才能刚好对半分,根据Bias=exp-E,从而得到Bias的值为127;