学点计算机——浮点数
痛苦的浮点数
先来说一下浮点。浮点表示对形如**V = x × 2y**的有理数进行编码。要理解浮点数的话,我们先要考虑含有小数值的二进制数字,对一个二进制小数bmbm-1…b0.b-1b-2…b-n,它的值应该为
形如0.1111…12这样刚好小于1的浮点数,我们可以用1-ε表示。
大家都知道所有的计算机都支持IEEE浮点的标准,那么这个标准是什么呢?V = (-1)s × M × 2E。s决定该浮点数的正负,1为负,0为正。M是一个二进制小数,范围为[0, 2 - ε]或者[0, 1 - ε]。E则为浮点数加权。
规格化的值中阶码字段被解释为以偏置形式表示的有符号整数,也就是说E = e - Bias,其中Bias的值的大小为2k-1-1,M = 1 + f。
非规格化的值很接近0,因为exp的值为0,阶码值E却为1 - Bias,设置这样的偏置值是为了让非规格化转变为规格化时能有一个平滑的变化,M = f。这非规格化数有一个属性叫逐渐溢出,可能的数值分布均匀地接近于0.0。